好的,所以我开始意识到dll是最简单的事情要理解,我试图制作一个与VC6兼容的dll,我在VS2010中运行了一些代码但是在试图找出如何使代码适用于VC6项目时,我发现了以下问题:
我对dll的调用看起来像这样
MyDll::connect();
当我尝试运行一个使用这个函数的程序时,它开始很好但是一旦它进入函数调用,即
VOID connect()
{
hello(); //0xC0000005: access violation
}
VOID hello()
{
int i = 1;
}
反汇编看起来像这样:
-> 00000000 ???
00000001 ???
00000002 ???
00000003 ???
00000004 ???
00000005 ???
00000006 ???
00000007 ???
00000008 ???
00000009 ???
etc...
答案 0 :(得分:1)
您没有导出该函数.....除非该函数被注册为导出函数,否则不允许程序访问dll中的函数。 要做到这一点你应该像这样原型
在类中导出一个函数应该这个函数 1-是公共会员。 2-是静态成员
class MyDll{
public:
static void connect();
}
//then redeclare it like this
#ifdef _cplusplus
extern "C"{
#endif
__declspec(dllexport) void MyDll::connect(){
//TODO
}
#ifdef _cplusplus
}
#endif
对要导出的任何类成员函数执行此操作
这是一个例子