请教如何在VC中引用一个dll文件

解决方案 »

  1.   

    先用LoadLibrary加载DLL,再用GetProcAddress函数检取其输出函数的地址,获得
    其指针来调用。如:
    HANDLE hLibrary;
    FARPROC lpFunc;
    int PortValue;hLibrary=LoadLibrary("PORTDLL.DLL"); //加载DLL
    if(hLibrary>31) //加载成功 
    {
        lpFunc=GetProcAddress(hLibrary,"PortIn"); //检取PortIn函数地址
        if(lpFunc!=(FARPROC)NULL) //检取成功则调用
            PortValue=(*lpFunc)(port); //读port端口的值
        FreeLibrary(hLibrary); //释放占用的内存

      

  2.   

    除了楼上的显式加载DLL外还有隐式加载
    隐式加载的时候需要将.lib文件加入到工程中,然后在包含相应的头文件就行了!
    希望对你有所帮助!
      

  3.   

    dll中
    extern "C" __declspec(dllexport) void test();主程序中
    typedef bool WINAPI test(); static HINSTANCE hinstDLL; 
    test* testb;if( hinstDLL=LoadLibrary( (LPCTSTR)"client.dll") )
    {
      testb=(test*)GetProcAddress(hinstDLL, "test");     
    }另 看dll中函数的方法:VC工具中的Depends
      

  4.   

    显式加载如楼上所说的,
    隐式加载的则要包含lib文件,且要在DLL中这样extern "C" __declspec(dllexport) void Fun();
    在用到的地方要包含其头文件且要这样extern "C" __declspec(dllimport) void Fun();
    其中extern "C"的作用是为了防止编译器的名字改编机制,是为了使导出和导入的函数名一致!
      

  5.   

    如果你有.h和.lib文件就好办了,包含.h就可以直接调用。
    如果只有.dll的话,你必须的知道.dll的导出函数的格式。
    如我们知道一dll是mydll.dll中有一导出函数int WINAPI add(int a,intb)
    调用如下:
    #include<windows.h>
    HANDLE hLibrary;
    typedef int (WINAPI *ADD)(int a,int b);
    hLibrary = LoadLibrary("mydll.dll");
    ADD add;
    add = (ADD)GetProcAddress(hLibrary,"add");
    这样以后就可以这样来调用了如:
    i = add(3,5)
      

  6.   

    显式调用还是隐式调用?正规dll
    扩展dll
    还是com的dll?以后提问清说清楚