c#调用c++写的注册用的的DLL的问题,高分求解

longdeng001 2012-03-31 09:41:20
C++代码(regedit.def)
; regedit.def : Declares the module parameters for the DLL.

LIBRARY "regedit"
DESCRIPTION 'regedit Windows Dynamic Link Library'

EXPORTS
SURE_RegeditSign
; Explicit exports can go here
c#代码:
public static class SrlibWrapper
{
[DllImport("regedit.dll", EntryPoint = "SURE_RegeditSign")]
public static extern bool SURE_RegeditSign( string appId, string regPath);

}
调用
if (!SrlibWrapper.SURE_RegeditSign("wlb_cndhia", "software\\wlb\\meter"))
{
return;
}
调试运行错误,
对 PInvoke 函数“抄表服务器!
RemoteMeterApp.SrlibWrapper::SURE_RegeditSign”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。

我是把那个regedit.dll文件放在了BIN文件夹中 ,哪儿出错了 ,请各位帮忙看一下,先谢谢了
这个DLL不能添加引用 不是com组件
...全文
137 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
WAN 2012-03-31
  • 打赏
  • 举报
回复
很显然,就是没找到regedit.dll这个dll文件,确保这个文件在当前文件夹下(Debug Or Release)
longdeng001 2012-03-31
  • 打赏
  • 举报
回复
在安装有VC++ 6.0时,可以正常调用 弹出注册界面 ,可以注册运行 ,
但是
我卸载了VC++ 6.0以后,在运行就出现了另外一个错误
在调用代码那个部分
无法加载 DLL“regedit.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。
蝶恋花雨 2012-03-31
  • 打赏
  • 举报
回复
尝试用regsvr32 注册一下这个dll然后放置到bin下面在这个解决方案中添加引用。
覃祖甘 2012-03-31
  • 打赏
  • 举报
回复
在dllimport中加入CallingConvention参数就行了,[DllImport(PCAP_DLL, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)]
bdmh 2012-03-31
  • 打赏
  • 举报
回复
[DllImport("regedit.dll", EntryPoint = "SURE_RegeditSign", CallingConvention = CallingConvention.Cdecl)]
这样试试,c++默认是Cdecl约定

111,126

社区成员

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

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

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