我现在写了一个C语言的接口:
#ifdef MONTITOR_DLL_EXPORT
#define MONITOR_EXPORT __declspec(dllexport)
#else  
#define MONITOR_EXPORT __declspec(dllimport)
#endifextern "C"
{
  MONITOR_EXPORT int HelloWorld(int age);
}我的DLL名称是abc.dll我现在想在Delphi中调用这个接口,我先把DLL文件拷贝到Delphi的工程里面,然后申明如下:
type
  function HelloWorld(int age):integer;cdecl;external 'abc.dll';然后在
procedure TForm2.Button1Click(Sender: TObject);
var
t : integer;
m : integer;
begin
  t := 10;
  m := HelloWorld(t);
end;但是这样做报错了:[DCC Error] Unit1.pas(63): E2169 Field definition not allowed after methods or properties
请问是什么原因呢?

解决方案 »

  1.   

    是不是应该
    function HelloWorld(age:integer):integer;stdcall;external 'abc.dll' name 'C';
      

  2.   

    在C的工程里面加入.def文件,要不然,DELPH调用的时候会有问题,你C的东西生成的函数实际上是HelloWorld@343293,所以调用的时候出错了,给分吧。
      

  3.   

    下载个depends的软件, 看下导出函数的名称
    extern "C"
    {
      __declspec(dllexport) int HelloWorld(int age);
    }
    这样其实名字不会变的, 只是DELPHI调用的时候要加  cdecl
    function HelloWorld(int age):integer;cdecl;external 'abc.dll' name 'HelloWorld'extern "C" __declspec(dllexport) int __stdcall HelloWorld(int age);
    这样在DELPHI调用时,名字就会变的, 加个导出文件defHelloWorld @1
      

  4.   

    我现在想在Delphi中调用这个接口,我先把DLL文件拷贝到Delphi的工程里面,然后申明如下:
    type
      function HelloWorld(int age):integer;cdecl;external 'abc.dll';
    ----------------------------------
    这样不需要另外加type  的
    你把他看成一个函数定义就行了function HelloWorld(int age):integer;cdecl;external 'abc.dll' name 'HelloWorld'