首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

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

2012-04-12 
c#调用c++写的注册用的的DLL的问题,高分求解C++代码(regedit.def) regedit.def : Declares the module pa

c#调用c++写的注册用的的DLL的问题,高分求解
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组件


[解决办法]
[DllImport("regedit.dll", EntryPoint = "SURE_RegeditSign", CallingConvention = CallingConvention.Cdecl)]
这样试试,c++默认是Cdecl约定
[解决办法]

C# code
在dllimport中加入CallingConvention参数就行了,[DllImport(PCAP_DLL, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)]
[解决办法]
尝试用regsvr32 注册一下这个dll然后放置到bin下面在这个解决方案中添加引用。
[解决办法]
很显然,就是没找到regedit.dll这个dll文件,确保这个文件在当前文件夹下(Debug Or Release)

热点排行