繁体   English   中英

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

[英]call to another function in a dll causes access violation

好吧,所以我开始意识到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中的函数。 为此,您应该像这样制作原型

要在类内导出函数,此函数应为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

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

这是一个例子

创建一个简单的动态链接库示例

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM