delphi制作动态库 vc来调用 该怎么写接口 怎么生成lib文件

解决方案 »

  1.   

    为什么要生成lib啊???
    library GetScreen;uses
      ShareMem,
      SysUtils,
      Windows,Graphics,
      Forms, JPEG,
      Classes;
    {$R *.res}function GetCurrentScreen(SaveFileName: Pchar):Integer ;Stdcall;
    begin
      ...
    end;exports
      GetCurrentScreen;end.VC调用就是int getScreen(char* FileName );
      

  2.   

    哦,错了,是先LoadLibrary的。
      

  3.   

    VC的代码:
    extern "C" long _stdcall  GetCurrentScreen(char* szSaveFileName); //external 'GetScreen.dll';void CTestCatchScreenDlg::OnOK() 
    {
    typedef  long  (WINAPI * LPFUNGETSCREEN) (char*);
    LPFUNGETSCREEN fGetScr;
    HMODULE hMd = LoadLibrary("GetScreen.dll"); if ( hMd == NULL)
    {
    AfxMessageBox("LoadLibrary Error!");
    return;
    } fGetScr = (LPFUNGETSCREEN)GetProcAddress(
    hMd,    // handle to DLL module
    "GetCurrentScreen");
    if (fGetScr == NULL)
    {
    AfxMessageBox("GetProcAddress Error!");
    return;
    }
    long lRet = (fGetScr)(".\\test.jpg"); }
      

  4.   

    要在多种语言中正常调用DLL,最好在Delphi中将DLL说明为stdcall,即Windows API形式,这样一般不会出现兼容性问题。VC++和Delphi都支持Pascal和C语言两种调用协定。 
        如果使用Pascal协定,VC++的函数定义前要加_stdcall修饰(stdcall是Windows的标准调用方式,可以在所有支持API调用的语言中使用),并且需要在.DEF文件中的EXPORTS端中加入函数名。在Delphi定义时要在函数名后加stdcall修饰(参见帮助)。 
        如果使用C协定,VC++的函数定义前要加__declspec(dllexport)修饰,不需要再修改.DEF文件了。在Delphi定义时要在函数名后加cdecl修饰(参见帮助)。