调用使用静态lib的dll时的Stackoverflow异常

时间:2015-03-24 10:42:47

标签: c# visual-studio-2010 dllimport dllexport

我编写了一个使用C ++静态Lib的C#应用​​程序。我已经将Lib包装在.dll中,但遇到了问题。当我调用.dll函数时,我得到System.Stackoverflow异常。

我必须使用.lib已经在其他地方使用过,我需要的解决方案能够让我从我的C#程序中与lib通信。

C#

CreateRegistryLocation(mPath);

[DllImport("Wrapper.dll", CallingConvention = CallingConvention.Cdecl)]
    public static extern int CreateRegistryLocation(string key);

C ++ .dll

extern "C" 
{
   __declspec(dllexport) int CreateRegistryLocation(const char* key)
   {
      return RegistryNamespace::CreateRegistryLocation(key);
   }
}

C ++ .lib

extern "C"
{
   int CreateRegistryLocation(const char* key);
}

如果我从dll中删除了对lib的调用,那么dll和应用程序之间的通信似乎就像我期望的那样工作。我已经删除了.lib中的正文并使其返回0所以我不这样做相信lib函数的主体与问题有关。我没有将返回值赋给C#中的任何内容,因此我没有看到递归问题。目前代码应该只是调用exe - > Dll - > Lib和值0应该返回链。

非常感谢任何见解。

1 个答案:

答案 0 :(得分:1)

__declspec(dllexport) int CreateRegistryLocation(const char* key)
{
    return RegistryNamespace::CreateRegistryLocation(key);
}

可能的解释是此函数位于RegistryNamespace命名空间中,因此RegistryNamespace::CreateRegistryLocation只是一个非终止递归调用。鉴于问题中的代码,这是最合理的解释。