当前位置:C++技术网 > 资讯 > C++调用动态库提示找不到模块

C++调用动态库提示找不到模块

更新时间:2017-04-22 14:15:11浏览次数:1+次

           昨天,我用C++调用了C的动态库,调用过程是没有问题的,但调用过程的代码我是用C++写的,而公司要求用C#调用C的动态库,这时,我就想,就把C++调用过程的代码封装成dll文件,省得我再用C#去写一次,而且,如果下次公司要求用别的语言调用,我也不用修改代码啊。

          我们来上一段dll文件的代码,在fndllsl方法中输出"DLLSL_API fndllsl ...."

    

    然后按F7编译一下,在dubeg下生成dllsl.dlll文件。

       我们再生成的dllsl.dll文件复制到C盘下,再新建一个Win32控制台应用程序,我们在这个项目中调用这个dllsl.dll文件,

      以下是调用代码,但是F5一下就出错了,明显就是找不到地址,但我的调用动态库文件的写法是正确的,奇怪了,为什么

      会找不到入口地址,在加载失败呢?

     

    我把fun()方法注释掉,再根据 GetLastError()提示的返回值,去查找一下原因.

    

    现在返回值是126,找不到指定模块,但是我在动态库中确实写了这个方法,而且,C盘下也有这个dllsl.dll文件啊

    

    

    

    于是,我继续看一下输出栏的错误提示,我这时才发现了两个很重要的提示:

    

    原因加载dllsl.dll就失败了,我把SXS: RtlCreateActivationContext() failed 0xc000000d复制到网上一查,别人也是有这种问题,解决方法很简单,只要在动态库编译时,改Release来编译就可以了,不能用Debug模式。

    

    

    

    再重新编译一下动态库,重新加载一下,F5一下,成功运行。