c++ - 调用 dll 中的另一个函数会导致访问冲突

标签 c++ dll access-violation disassembly

好吧,所以我开始意识到 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...

最佳答案

您没有导出函数 .....不允许程序访问 dll 中的函数,除非该函数已注册为导出函数。 为此,您应该像这样制作原型(prototype)

要在类中导出一个函数,这个函数应该 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

对你想要导出的任何类成员函数执行此操作

这是一个例子

Creating a simple Dynamic Link Library example

关于c++ - 调用 dll 中的另一个函数会导致访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25360354/

相关文章:

c++ - eclipse 不会运行我的 exe 文件

c# - 发布网站到IIS,服务器锁定dll文件

c++ - 使用 dllexport 和特定函数名称时未解析的外部符号

c++ - 双指针出数组参数异常

c - Malloc 在为整数分配空间时表现异常

c++ - 完美的转发构造函数和继承构造函数

c++ - 从方法获取链表中的位置

c++ - 如何使用 Dev-cpp 生成 .lib?

WPF:加载资源字典时的 XamlParseException -> AccessViolation

c++ - 派生类不会覆盖具有不同签名的虚函数