我使用正则dll,代码如下:#define CF_API __declspec(dllexport)extern "C" CF_API BOOL PASCAL x()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CMyDlg dlg;
dlg.DoModal();
return 1;
}调用函数如下:
HINSTANCE hInst=LoadLibrary("fdll.dll");
if(hInst)
{
typedef BOOL (PASCAL *x)();
x t=NULL;
t=(x)GetProcAddress(hInst,"x");
//执行到这里的时候t总是为NULL;
if(t)
{
t();
}
//x();
}
FreeLibrary(hInst);
但我无法得到函数的指针,请问是何原因?
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CMyDlg dlg;
dlg.DoModal();
return 1;
}调用函数如下:
HINSTANCE hInst=LoadLibrary("fdll.dll");
if(hInst)
{
typedef BOOL (PASCAL *x)();
x t=NULL;
t=(x)GetProcAddress(hInst,"x");
//执行到这里的时候t总是为NULL;
if(t)
{
t();
}
//x();
}
FreeLibrary(hInst);
但我无法得到函数的指针,请问是何原因?
1、DLL 没有正确EXPORT
2、定义的函数类型不对慢慢我以前也磁上这种情况 现在可没有了呵呵羡慕吧另: 我有源代码
__declspec(dllexport)关键字,而我已经用了这个关键字,
我觉得应该能够导出函数啊,为什么非要用export呢?
难道正则dll只能export么?我在扩展dll中用得很好啊!
不过一般情况是这样的---每种编译器在编译时,对函数的命名的规则都不太一样
所以,常常从外部看到的函数根本不是我们预先设想的
对此你可以使用VC 自带的工具 DUMPBIN。EXE 来进行查询你的定义的函数是否正确EXPORT 若对了再检查调用库的规则是否正确。有些东西涉及到dLL的编写和PE结构中对DLL的IMPORT问题有兴趣可以自己看一看
我记得好象是选择一个类型的工程 ,vc会自动为它生成一组编译连接的选项
每一种工程是不完全一样的
当用vc定义的宏时可以起到将FUN() EXPORT 的作用,实际上就是通知编译连接器这个FUN()是要输出的,编译连接时要保证它的名字不变并且对外可见而DEF文件是一种通用的方法任何编译器都会认识的。我一般都是将两者都写上的,省得出错呵呵
不知道说清楚了没有呵呵