1、如果在VC中调用Delphi编的DLL?
2、需要什么(dll,lib,函数类型,参数……),不用lib行吗?怎么做?

解决方案 »

  1.   

    参考:
    http://www.vckbase.com/document/viewdoc/?id=1116
      

  2.   

    创建“通用的”动态链接库(DLL)http://www.vckbase.com/document/viewdoc/?id=580
      

  3.   

    一个例子:
    ///////////调用dll,函数原型是function FuncRunDll(IntMainPrgHdl:integer;PchrMainWorkPath,PChrUserCode:Pchar): integer; stdcall;//begin
    typedef int (WINAPI * NETDLL)(int,char*,char*);
    HINSTANCE hmod;
    hmod = ::LoadLibrary("NetManager.dll");
    if(hmod != NULL)
    {
        strcpy(szWorkDir,(LPSTR)(LPCTSTR)GetRootDir());
        NETDLL lpproc;
        lpproc = (NETDLL)GetProcAddress (hmod,"FuncRunDll");
        int n = *(int*)&this->m_hWnd;
        lpproc(n,szWorkDir,m_szNSR);
        FreeLibrary(hmod);
    }
    else
        AfxMessageBox("加载NetManager.dll失败!");
      

  4.   

    VC调用Delphi的DLLDelphi中的声名格式: 
    Function ShowDialog( hMainWnd:THandle; Msg:PChar ):integer; stdcall;输出到Dll文件中时,名称不分裂。VC中的调用格式: 
    extern "C" __declspec(dllimport) int __stdcall ShowDialog( HWND hwnd,char* Msg );.如带有__stdcall,则要求Lib文件中对应函数名称分裂,可有以下步骤生成Lib文件:.用Impdef.exe生成def文件,格式为:Impdef def文件名 dll文件名.手工调制def文件参数,如ShowDialog改为ShowDialog@8.用Lib.exe生成lib文件,格式为:Lib /def:def文件名.如声名中无__stdcall,默认调用格式仍为stdcall,但不要求名称分裂,用以下批处理文件MkLib.bat可生成Lib文件:@echo offif %1.==. goto errorimpdef %1.def %1.dlllib /def:%1.defgoto end:errorecho Usage: MkLib DllNameecho Note: Don't add extension ".dll" to parameter "DllName":end
      

  5.   

    lib 生成秘方。如果是有头文件,有dll、无lib的情况,最方便的方法,是用头文件,自己写一个函数体都为空的等效输出的vc dll工程,编译一下,不就有了lib文件吗。想要什么样的,就有什么样的。这个方法可就不需要什么第三方工具了。比较简单。
      

  6.   

    1、如果在VC中调用Delphi编的DLL?
    2、需要什么(dll,lib,函数类型,参数……),不用lib行吗?怎么做?就需要DLL 当然函数原型是要知道的 即可.
    直接 ::LoadLibrary / ::GetProcAddress即可
      

  7.   

    同意crystal521(水晶泪)的做法。
    同时,如果别人的dll导出函数使用extern "C" __declspec(dllimport)而非_stdcall方式,那么你在VC中调用Delphi或者在Delphi中调用VC的dll几乎可以肯定的说不能成功,这时候你如果已知函数的原型,你需要使用与原来编写dll一样的语言自己再封装一层dll,把所有的接口都修改为_stdcall的方式,再来调用这个新的dll。
      

  8.   

    如果没有lib文件,你只能使用
    LoadLibrary("aaa.dll");
    的方式来进行调用了。