C++生成动态链接库dll,jna调用失败问题

hdxxiang 2017-09-20 04:18:41
用VS2010生成dll,代码如下:


#include "iostream"
using namespace std;
extern "C"_declspec(dllexport) int Add(int a,int b);
int Add(int a,int b){
const char * pcTest = "99";
string test(pcTest);
return a+b;
}


然后用jna调用,发现在Windows 7调用成功。我又把它放在在Windows server 2008上调用就失败了。报如下的错:

Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load libra
y 'TestDll': ???????¨
at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:164)
at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:237)
at com.sun.jna.Library$Handler.<init>(Library.java:140)
at com.sun.jna.Native.loadLibrary(Native.java:374)
at com.sun.jna.Native.loadLibrary(Native.java:359)
at com.eebbk.bmd.Decoder.<clinit>(Decoder.java:37)
at com.eebbk.bmd.DecoderTest.main(DecoderTest.java:24)

经过多番实验验证,把
const char * pcTest = "99";
string test(pcTest);
这两句代码去掉重新生成dll,这样windows7 和 Windows server 2008就可以都调用成功了。
跪求各位大神帮助,我写的这个dll,肯定会使用到 字符串 char*转string类型,但是就是因为这个转换导致了bug。
各位大神给给建议
...全文
446 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-09-21
  • 打赏
  • 举报
回复
学会使用depends.exe查看exe或dll依赖的其它dll C Run-Time Libraries http://msdn.microsoft.com/zh-cn/library/abx4dbyh(VS.80).aspx
hdxxiang 2017-09-21
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
坊间传闻,dll中不要使用STL
我今天又用JNI调用dll方式试了一下。发现了同一个问题只要是生成Dll的VS2010工程中包含了string类型的,就运行不成功。而且问了一些同行他们生成的dll工程里果然都是不用string的,一般都用char*类型。因为我引用了网上的一段代码,里面大部分都是string,最终采取了一个折中的办法: 在windows server 2008安装了VS2010的简化版,安装后居然调用成功了。 原因分析:可能是windows server 2008少了一些库,导致dll调用失败。
赵4老师 2017-09-20
  • 打赏
  • 举报
回复
坊间传闻,dll中不要使用STL

64,651

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧