如题。如果能,请问该如何操作?

解决方案 »

  1.   

    有静态和动态两种,静态的需要lib而动态的只需要一个dll就可以了(但是要知道函数的定义一般是头文件)动态相对复杂一点!但是掌握了也不是很难
    //第一步  定义函数指针就是你要调用的函数,参数必须一致,不然就内存泄露
    typedef HANDLE (PASCAL * OPEN)(char *,int);
    //第二步  定义本地函数
    //一般前两步都在头文件里面声明
    OPEN   open;
    //第三步 加载dll
    HMODULE m_hLib;
    m_hLib  ::LoadLibrary"E:\\yewufuwu\\TERMINALDLL\\Debug\\TerminalDLL.dll");
    //输入相应的路径
    if(m_hLib == NULL )
    {
       MessageBox("动态连接库没有找到!!!","LoadLibrary",MB_OK);
      return ;
    }
    //第四步
    else
    {
       MessageBox("动态连接库成功打开...","LoadLibrary",MB_OK);
       open=(OPEN)GetProcAddress(m_hLib, "OpenDevice");
    }//第五步
    long  handle =open("EF",1);动态库下的函数如下
    //*************打开终端*****************************************
    HANDLE __declspec(dllexport)  WINAPI
    OpenDevice(char * szType,int nType)
    { hReader=theTerminal.OpenReader(szType,0);
    if(hReader==0)
    return 0;
    DWORD ThreadID=0;
        return hReader;
    }
      

  2.   

    可以,用显式链接,它是应用程序在执行过程中随时可以加载DLL文件。使用显式链接应用程序编译时不需要使用相应的Lib文件。看看下面的简单例子:
    //MyDLL.h
    extern "C" _declspec(dllexport) int Max(int a, int b);
    extern "C" _declspec(dllexport) int Min(int a, int b);显式链接:#include "MyDLL.h"
    void main(void)
    {
    typedef int(*pMax)(int a,int b);
    typedef int(*pMin)(int a,int b);
    HINSTANCE hDLL;
    PMax Max
    HDLL=LoadLibrary("MyDll.dll");//加载动态链接库MyDll.dll文件;
    Max=(pMax)GetProcAddress(hDLL,"Max");
    A=Max(5,8);
    Printf("比较的结果为%d ",a);
    FreeLibrary(hDLL);//卸载MyDll.dll文件;
    }
      

  3.   

    有头文件就好办, 象楼上那样显式连接就不用 LIB 文件了, 另外, LIB 文件也可以手工创建,这样就可以隐含地连接到DLL了 :Visual C++ 开发工具提供了两个命令行工具,一个是dumpbin.exe,另一个是lib.exe。利用这两个工具即可从dll导出其对应的lib。1、在命令行执行:
    dumpbin /exports yourdll.dll > yourdll.def2、编辑 yourdll.def 文件,使之格式与.def文件格式一致。比如:EXPORTS
      fn1
      fn23、在命令行执行:
    lib /def:yourdll.def /machine:i386 /out:yourdll.lib