Dll помагайте

8 отговора 377 прегледа
#1

Dll помагайте

Здравейте имам голям проблем!
DLL функция извлича информация от constanta и я праща на приложението, което извиква въпросната функция. До тук всичко си е наред.
Когато затворя приложението ми дава тая грешка: Runtime error 217 at 00413B04

Изплозвам ShareMem (на приложението и dll-а) заради константите.

Отговор
в отговор на Siska #2

Re: Dll помагайте

Ще помогне ако paste-неш малко от кода - как се свързваш с dll-а, как викаш функцията, как изглежда функцията и т.н.

Отговор
в отговор на Formal #3

Re: Dll помагайте

Application:

uses ... ShareMem;

function proba(b:byte):string; stdcall external 'projectdll.dll';

procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage(proba(5));
end;

DLL:

uses
SysUtils, System,
Classes, ShareMem;

const
c:array[1..6] of char = ('a','b','c','d','e','f');

function proba(b:byte):string; stdcall;
begin
result:=c;
end;

exports proba;

Отговор
в отговор на Formal #4

Това е кода:

Application:

uses ... ShareMem;

function proba(b:byte):string; stdcall external 'projectdll.dll';

procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage(proba(5));
end;

DLL:

uses
SysUtils, System,
Classes, ShareMem;

const
c:array[1..6] of char = ('a','b','c','d','e','f');

function proba(b:byte):string; stdcall;
begin
result:=c;
end;

exports proba;

Отговор
в отговор на Siska #5

Re: Това е кода:

ShareMem should always be the first unit listed in any program or library uses clause where it occurs.

Отговор
в отговор на NDeu #6

Re: Това е кода:

Преместих ShareMem в началото на всички библиотеки, но пак е същата работа.?

Отговор
в отговор на Siska #7

Re: Това е кода:

Само за пробата опитай да направиш функцията да ти връща Char, а не String.

При мен това работи без проблеми:
-----------------------------
program prj;
{$APPTYPE CONSOLE}
uses ShareMem;

function proba(b:byte):string; stdcall external 'projectdll.dll';

begin
writeln(proba(5));
end.
-----------------------------
library projectdll;

uses ShareMem;

const
c:array[1..6] of char = ('a','b','c','d','e','f');

function proba(b:byte):string; stdcall;
begin
result:=c[ b ];
end;

exports proba;

end.
-----------------------------
Сигурен/на ли си, че проблема е с dll-а, а не с нещо друго в твоето приложение?

Редактирано от Formal на

Отговор
в отговор на Siska #8

Re: Това е кода:

Компилирай и Application-a и DLL-a като чекнеш Build with Runtime package в Project->Option.

Отговор
в отговор на nqkoisi #9

Стана

Niakoisi, благодаря ти

Отговор