Доброго времени суток!
Уважаемые программисты помогите найти решение следующей проблемы:
Есть dll написанная на Delphi, в ней две экспортируемые функции:
Сообщение от :
library Project1;
uses ShareMem, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, {..} StdCtrls,
ComCtrls;
{$R *.res}
Function HashF(Fname :string) :String; export; stdcall;
begin
{..}
end;
Function Crypt_file(inFname,outFname,password :String; algNum :integer) :Boolean; export; stdcall;
begin
{..}
end;
exports Crypt_file, HashF;
begin
end.
В Visual C++ 9.0 создаю новый проект CLR, Windows Forms Application, и по нажатию кнопки необходимо использовать функции из dll.
Помогите кто чем может (-:
kolega 21:06 26.03.2008
Попробуй поменять stdcall на cdecl. И покажи код, которым вызываешь нужные тебе функции.
SmallBo 04:49 27.03.2008
Сообщение от :
Function HashF(Fname :string) :String; export; stdcall;
...
Function Crypt_file(inFname,outFname,password :String; algNum :integer) :Boolean; export; stdcall;
...
во-первых, убирай String. В дельфях строки - совсем другие, чем в C#, поэтому юзай PChar (стандартные сишные строки, оканчивающиеся нулем). Это позволит использовать эти функции не только в C#, но и С\С++.
во-вторых, stdcall или cdecl? В WinAPI используются stdcall, так что я бы оставил так, как есть - по большому счету, это не важно, лишь бы правильно объявить функцию в вызывающем коде.
в-третьих, как заюзать все это из CLR? Вот хорошая статья на эту тему: http://www.rsdn.ru/article/dotnet/coopdll.xml