我用MS VISULA C++6.0写了个DLL,在C++下调用是成功的,在DELPHI下调用就出错了(如图1)。代码如下,不知什么问题,高人请指点,必酬重分。注:本人不会DELPHI。
函数C++定义如下:
typedef int (*FreeEIM)(char *szDest, char *szMessage);
C++下可以以轻松调用,C++ 示例如下:(执行成功,无任何错误)。
#include "stdafx.h"
#include <windows.h>
typedef int (*FreeEIM)(char *szDest, char *szMessage);
int main(int argc, char* argv[])
{
HINSTANCE hInst = LoadLibrary("feimt.dll");
if (NULL != hInst)
{
printf("Library loaded.\r\n");
FreeEIM freeeim;
freeeim = (FreeEIM)GetProcAddress(hInst,"FreeEIM");
if (freeeim)
{
printf("Load ok.\r\n");
freeeim("127.0.0.1", "hello.");
}
}
return 0;
}
以下是DELPHI的调用,不知哪里出错,请看看:
图一:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
//////////// 这里是函数定义吧?
TMB = function(szDest, szMessage: string ): Integer; stdcall;
////////////
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
//MB 函数的声明:
function MB( szDest, szMessage :string): Integer; stdcall;
implementation
{$R *.dfm}
function MB; external 'feimt.dll' name 'FreeEIM'
procedure TForm1.Button1Click(Sender: TObject);
begin
mb('127.0.0.1','hello.');
end;
end.
请帮忙解决,谢谢!