动态调用容易
不过你得知道 函数在vc中相应的声明方式
简单的例子
typedef int (PASCAL *TYPE_MYFUN)(HWND,LPCTSTR,LPCTSTR,UINT);
TYPE_MYFUN MyFun;
HMODULE hUserDll=LoadLibrary("user32.dll");
MyFun=(TYPE_MYFUN)GetProcAddress(hUserDll,"MessageBoxA");
MyFun(0,"asdasd","aaa",0);静态调用也容易
自己建立一个dll工程,按着导出函数的顺序依次添加函数,用def文件限定导出名字.
然后用这个dll工程生成的lib库 去做静态链接用.
不过同样得知道函数在vc中相应的声明方式
ps用工具声明的lib库似乎无法保证没有问题
不过你得知道 函数在vc中相应的声明方式
简单的例子
typedef int (PASCAL *TYPE_MYFUN)(HWND,LPCTSTR,LPCTSTR,UINT);
TYPE_MYFUN MyFun;
HMODULE hUserDll=LoadLibrary("user32.dll");
MyFun=(TYPE_MYFUN)GetProcAddress(hUserDll,"MessageBoxA");
MyFun(0,"asdasd","aaa",0);静态调用也容易
自己建立一个dll工程,按着导出函数的顺序依次添加函数,用def文件限定导出名字.
然后用这个dll工程生成的lib库 去做静态链接用.
不过同样得知道函数在vc中相应的声明方式
ps用工具声明的lib库似乎无法保证没有问题
参数个数和类型是调用成功的关键
所以必须只要原来函数在pascal中的声明.
静态调用就是调用api是一样的,包含头文件,和相应的lib.
是stdcall的吧,严格按照动态调用方法调用,还是出错
HINSTANCE dll;
int return_value;
typedef int(__stdcall *dll_fun)();
dll = ::LoadLibrary("MultVod.dll");
if(dll==NULL)
{
AfxMessageBox("Can't find dllFile");
return 0;
}
dll_fun proc = (dll_fun)GetProcAddress(dll,"VodInitCard"); if (proc = NULL)
{
AfxMessageBox("can't find function:VodInitCard");
return 0;
}
else
{
return_value = proc();//出错位置,前面都正确
return return_value;
}
有错误请指出,谢谢