私はDLLから関数を呼び出すのはまったく初めてです(プログラミングの悪い習慣と呼んでいますが、必要はありませんでした)。
次のシグネチャを持つ関数をエクスポートすることになっているこの C++ dll ( https://skydrive.live.com/redir?resid=4FA1892BF2106B62!1066の CidGen32.dll ) があります。
extern "C" __declspec(dllexport) int GetCid(const char* pid, char* cid);
'1111111111118' のような 13 文字の文字列を取得し、20 文字のハッシュを返す必要があります。
ここ数日間、Delphi 6 でこの関数を呼び出そうとしましたが、役に立ちませんでした。50以上の組み合わせを必死に試しましたが、ある時はかなり接近しましたが、コンピューターがフリーズしてすべての努力を失いました。運次第だったので、もうやり直せませんでした。
また、DLL を登録するのではなく、同じフォルダーに配置することを目指しています。
とにかく、計画は次のようなものを持つことでした:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
function GenerateCID(Prm: string): string;
var
aCID: PAnsiChar;
uCID: AnsiString;
i: integer;
Hbar: Thandle;
GetCID: function (X: PAnsiChar; Y: PAnsiChar): integer; {$IFDEF WIN32} stdcall; {$ENDIF}
begin
ucid := '';
hbar := LoadLibrary('CidGen32.dll');
if Hbar >= 32 then
begin
@GetCID := GetProcAddress(HBar, 'GetCID');
if Assigned(GetCID) then
begin
i := GetCID(pAnsiChar(prm), aCID);
uCID := aCID;
end;
FreeLibrary(HBar);
end
else
begin
//ShowMessage('Error: could not find dll');
end;
result := uCID;
end;
begin
ShowMessage(GenerateCID('1111111111118'));
end;
end.
しかし、私は完全に間違っているようです。