Что-то с DLL

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
SeRRg
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 343
Зарегистрирован: 25.11.2003 (Вт) 20:14
Откуда: Тюмень!

Что-то с DLL

Сообщение SeRRg » 05.04.2005 (Вт) 12:17

У меня есть DLL написанная на Delphi
Вот исходник главного файла:
----------------------------------
library Project2;

uses
Windows,
Messages,
SysUtils,
Classes,
FGInt,
FGIntPrimeGeneration,
StdCtrls;

{$R *.res}
var
p : TFGInt;
st: string;


Function Prostoe (const chislo:string):string; stdcall; export;
begin
Base10StringToFGInt(chislo, p) ;
PrimeSearch(p);
FGIntToBase10String(p, st) ;
Prostoe:=st;
end;

exports
Prostoe;

begin
end.
-------------------------------------
Когда я ее компилирую и делаю DLL все нормально. В Бэйсике я объявляю:
Private Declare Function Prostoe Lib "D:\ïðîãðàììèðîâàíèå\DLL\Project2.dll" (chislo As String) As String

Но когда я запускаю, появляется: "Инструкция по адресу ... обратилась к памяти по адресу ... Память не может быть read"
Если же я использую ее из Delphi то все нормально.
Где я ошибаюсь?
VB - это звучит!

kif
Постоялец
Постоялец
 
Сообщения: 736
Зарегистрирован: 10.12.2001 (Пн) 18:06
Откуда: Украина, Одесса

Сообщение kif » 05.04.2005 (Вт) 12:21

может теюе эту функцию на vb нарисовать
:)
Братья и сестры, что вы делаете???
Ведь вы же братья и сестры.

kif
Постоялец
Постоялец
 
Сообщения: 736
Зарегистрирован: 10.12.2001 (Пн) 18:06
Откуда: Украина, Одесса

Сообщение kif » 05.04.2005 (Вт) 12:24

если для определения простого числа, то попробуй это
Код: Выделить всё
'Определяет является ли число простым
Public Function IsPrime(ByVal P As Long) As Boolean
  Dim Max As Long, F As Long
 
  IsPrime = False
  If P < 2 Then Exit Function
  If ((P And 1) = 0) Then
     IsPrime = (P = 2)
     Exit Function
  End If
  If ((P Mod 3) = 0) Then
     IsPrime = (P = 3)
     Exit Function
  End If
  Max = CLng(Int(Sqr(P)))
  For F = 5 To Max Step 6
      If (((P Mod F) = 0) Or ((P Mod (F + 2)) = 0)) Then Exit Function
  Next
  IsPrime = True
End Function

выдернул с сайта vbnet.com
Братья и сестры, что вы делаете???
Ведь вы же братья и сестры.

SeRRg
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 343
Зарегистрирован: 25.11.2003 (Вт) 20:14
Откуда: Тюмень!

Сообщение SeRRg » 05.04.2005 (Вт) 12:40

Нет, нет! Мне надо именно определить в чем ошибка в моем коде (я ни разу не писал DLL и поэтому не могу понять где именно ошибка)
К тому же мне надо оформить ее именно в виде Native DLL

2kif
Кстати, твоя функция работает если число Long
А у меня оно гораздо больше.
VB - это звучит!

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 05.04.2005 (Вт) 12:46

Код: Выделить всё
Function Prostoe (const chislo:string):string; stdcall; export
заменить на
Код: Выделить всё
Function Prostoe (const chislo:pAnsiChar):pAnsiChar; stdcall;


В VB написать
Код: Выделить всё
Private Declare Function Prostoe Lib "D:\ïðîãðàììèðîâàíèå\DLL\Project2.dll" (byval chislo As String) As String
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

SeRRg
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 343
Зарегистрирован: 25.11.2003 (Вт) 20:14
Откуда: Тюмень!

Сообщение SeRRg » 05.04.2005 (Вт) 15:46

2GSerg
Спасибо! Только я написал PAnsiString, а не PAnsiChar!
VB - это звучит!

|kerish|
Постоялец
Постоялец
 
Сообщения: 831
Зарегистрирован: 22.10.2004 (Пт) 0:31

Сообщение |kerish| » 05.04.2005 (Вт) 23:57

Дело закрыто :)


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 189

    TopList