关于C#调用C++编写的DLL问题

CPX1984 2018-03-07 12:06:17
最近因为需要,想用C#调用DLL开发一个软件,开发文档只有接口描述
初始化(Std_Initialize)
函数原型:
extern ”c” _declspec(dllexport)
Long __stdcall Std_Initialize(viod)
参数说明:

返回值:
返回值 代表含义
>=0 调用成功
-1 调用失败
-98 输入参数非法
-99 其它错误

我直接引用DLL报错,使用
[DllImport("StdClient.dll")]
public static extern System.Int32 Std_Initialize();
可以编译,但是EXE运行一开始初始化就报错,显示:无法加载DLL,找不到指定的模块。

第一次做这方面开发,没有经验,网上找了几天资料,没有任何头绪,只能求教各位大虾帮忙。
...全文
894 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
CPX1984 2018-03-29
  • 打赏
  • 举报
回复
引用 11 楼 kobehahaha 的回复:
[quote=引用 6 楼 CPX1984 的回复:] [quote=引用 3 楼 kobehahaha 的回复:] 写代码过程调用dll 然后单步 参考:https://www.cnblogs.com/xuwendong/p/7575181.html
我写的不是WEB,能编译应该语法没问题…… [/quote]这个参考代码跟web又没多大关系,然后单步是为了看语法有没有问题的?你这种不虚心的态度是学不好做事情的,不止是写代码!!![/quote] 能通过一个回复,简单一句话就否认了我的努力?你就那么能断定我没看你发的文章?没去尝试?你写代码水平可能很高,但态度是不是太武断了?
CPX1984 2018-03-29
  • 打赏
  • 举报
回复
引用 13 楼 xuzuning 的回复:
无法加载DLL,找不到指定的模块 显然 StdClient.dll 依赖于另一个 dll
谢谢,我用depends看过,发现电脑缺了很多DLL,然后我就到生产环境调试,还是报一样的错误。我跳过这个DLL开发了。谢谢大家热心指点。
wxf54318 2018-03-29
  • 打赏
  • 举报
回复
我在C#中调用多WIN32 API没有你这个问题,应该是你的DLL有问题,或是DLL放的路径不对,可以尝试把DLL放到你程序同一个目录或添加环境变量。
xuzuning 2018-03-09
  • 打赏
  • 举报
回复
无法加载DLL,找不到指定的模块 显然 StdClient.dll 依赖于另一个 dll
yangshuanzhu 2018-03-09
  • 打赏
  • 举报
回复
找不到指定的模块 ,是不是你调用的那个dll有别的依赖呀。自己看看dll的内部符号表
百合杰 2018-03-09
  • 打赏
  • 举报
回复
引用 6 楼 CPX1984 的回复:
[quote=引用 3 楼 kobehahaha 的回复:] 写代码过程调用dll 然后单步 参考:https://www.cnblogs.com/xuwendong/p/7575181.html
我写的不是WEB,能编译应该语法没问题…… [/quote]这个参考代码跟web又没多大关系,然后单步是为了看语法有没有问题的?你这种不虚心的态度是学不好做事情的,不止是写代码!!!
CPX1984 2018-03-09
  • 打赏
  • 举报
回复
引用 7 楼 xian_wwq 的回复:
找c的示例代码试下,先保证调用的dll没有问题 或使用depends查看dll的依赖项,是否缺少相关文件
我depends看了,一开始我开发的电脑是WIN10,确实少了很多文件。然后我换了台生产环境的电脑(可以正常运行C++编写的DEMO),还是不行。 是不是C++开发的DLL,有些不按标准写的只能C++调用?
CPX1984 2018-03-09
  • 打赏
  • 举报
回复
引用 8 楼 zhanghan1993 的回复:
我一般调用时是需要指定入口点。。。,你这个只是指定调用了那个DLL但是入口点貌似也需要指定一下吧?你可以试试这样 [DllImport("StdClient.dll",EntryPoint="Std_Initialize")] public static extern System.Int32 Std_Initialize(); 然后试试行不行
加了还是不行,好像不写就是按默认参数调用。 我换了另一个SDK里的DLL,可以正常调用。
天际抓根宝 2018-03-09
  • 打赏
  • 举报
回复
用depends 看下这个dll有没有其他依赖的库
lionelmessiCODE 2018-03-08
  • 打赏
  • 举报
回复
我一般调用时是需要指定入口点。。。,你这个只是指定调用了那个DLL但是入口点貌似也需要指定一下吧?你可以试试这样 [DllImport("StdClient.dll",EntryPoint="Std_Initialize")] public static extern System.Int32 Std_Initialize(); 然后试试行不行
xian_wwq 2018-03-08
  • 打赏
  • 举报
回复
找c的示例代码试下,先保证调用的dll没有问题 或使用depends查看dll的依赖项,是否缺少相关文件
  • 打赏
  • 举报
回复
站在 c#、java 等等现代语言立场来看 c 语言,那么指针就是最垃圾的最混乱的根源。
qq_35345151 2018-03-07
  • 打赏
  • 举报
回复
BIN目录下面的C++ DLL 不存在
CPX1984 2018-03-07
  • 打赏
  • 举报
回复
引用 3 楼 kobehahaha 的回复:
写代码过程调用dll 然后单步 参考:https://www.cnblogs.com/xuwendong/p/7575181.html
我写的不是WEB,能编译应该语法没问题……
CPX1984 2018-03-07
  • 打赏
  • 举报
回复
引用 1 楼 sp1234 的回复:
站在 c#、java 等等现代语言立场来看 c 语言,那么指针就是最垃圾的最混乱的根源。
是啊,指针容易出bug。
CPX1984 2018-03-07
  • 打赏
  • 举报
回复
引用 2 楼 qq_35345151 的回复:
BIN目录下面的C++ DLL 不存在
放了的,DEBUG目录里也放了……
百合杰 2018-03-07
  • 打赏
  • 举报
回复
写代码过程调用dll 然后单步 参考:https://www.cnblogs.com/xuwendong/p/7575181.html

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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