首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DllImport StackOverflowException

DllImport StackOverflowException
EN

Stack Overflow用户
提问于 2011-02-04 16:39:54
回答 3查看 1.1K关注 0票数 0

我正在尝试使用c#的borland c builder动态链接库( C++ DLL)。函数writeParameter工作得很好,它将正确的数据写入文件,但是我有一个异常“在PresentationFramework.dll中发生了'System.StackOverflowException‘类型的未处理异常”

C++代码:

代码语言:javascript
复制
#include <vcl.h>
#include <windows.h>
#include <fstream.h>
#pragma hdrstop
#pragma argsused
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved)
{
  return 1;
}
//---------------------------------------------------------------------------
#pragma pack (push,1)
typedef struct     
{
     int     a;
}ABC;
#pragma pack (pop)
//---------------------------------------------------------------------------

extern "C" void __declspec(dllexport) __cdecl writeParameter(ABC *abc)
{
   ofstream outfile("result.txt");
   outfile<< "A="   <<endl;
   outfile << abc->a <<endl;
   outfile.close();
}

c#:

代码语言:javascript
复制
[StructLayoutAttribute(LayoutKind.Sequential)]
public class ABC
{
    public int a;
}
[DllImport("D:\\monitorVC.dll", EntryPoint = "_writeParameter", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
        public static extern void WriteParameter( 
            [In,MarshalAs(UnmanagedType.LPStruct)]
            ABC abc
            );

        private void Grid_Loaded(object sender, RoutedEventArgs e)
        {
                var abc = new ABC() {a = 123};
                WriteParameter(abc);
        }
EN

回答 3

Stack Overflow用户

发布于 2011-02-04 16:54:48

请阅读这篇blog post,了解为UnmanagedType.LPStruct选择的非常糟糕的名称,以及它是如何做不到每个人都认为它是做的。像这样修改你的声明:

代码语言:javascript
复制
[DllImport(...)]
public static extern void WriteParameter([In] ref ABC abc);
票数 2
EN

Stack Overflow用户

发布于 2011-02-04 16:45:42

类!= C#中的结构。

此外,在C#版本和C++版本之间,您的结构的打包也不相同。

票数 0
EN

Stack Overflow用户

发布于 2012-07-17 23:20:06

我知道这个问题发布已经有一段时间了,但我在尝试加载到VS2010 C#项目时也有过同样的经历,这是一个用CodeGear C++ Builder2007构建的.dll。

解决方法是从我的.dll中删除所有TForms。在我看来,从这些表单中导出的符号(顺便说一句,我无法删除)“导致”加载器出现堆栈溢出。

致以问候。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4896010

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档