调用使用静态库的 dll 时出现 Stackoverflow 异常

Stackoverflow exception when calling dll which uses a static lib

我正在编写一个使用 C++ 静态库的 C# 应用程序。我已将 Lib 包装在 .dll 中,但 运行 出现了问题。当我调用 .dll 函数时,出现 System.Whosebug 异常。

我必须使用 .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 和应用程序之间的通信似乎可以正常工作,因为我 expect.I 已经删除了 .lib 中的主体并使它只是 return 0 所以我不认为 lib 函数的主体与问题相关。我没有将 returned 值分配给 C# 中的任何内容,因此我看不到任何递归问题。目前代码应该只是调用 exe -> Dll -> Lib 并且值 0 应该 return 备份链。

任何见解将不胜感激。

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

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