我有一个VC6开发的DLL,采用C++开发的.exe程序调用时需要在命令行中添加/stack 0xA00000,0x800000才能正常调用,否则出错。现在我想使用C#调用该DLL,发现总是出现
System.StackOverflowException类型错误,由于C#的命令行中没有/stack指令,请问该如何
调用这种DLL?我采用VC.NET编写的.exe加如/stack 0xA00000,0x800000可以正常调用该DLL,
采用VC.net将该DLL封装为一个COM组件以后依然只能用VC.NET的执行程序调用。请问该如何解决?

解决方案 »

  1.   

    建议去microsoft新闻组问问.
    或者合作伙伴新闻组问问注册合作伙伴不收费用
    www.microsoft.com/china/partner我用C#调用VC6.0写的一个COM  Control,但是没有遇到你说的问题你在看看microsoft对这种异常是怎么解释的
      

  2.   

    STACK(堆栈分配)请参见
    设置链接器选项 | 链接器选项
    /STACK:reserve[,commit]
    /STACK 选项设置堆栈的大小(以字节为单位)。此选项仅在生成 .exe 文件时使用。该选项指定虚拟内存中的总的堆栈分配。默认堆栈大小为 1 MB。链接器将指定值向上舍入为最接近的 4 个字节。commit 取决于操作系统所作的解释。在 Windows NT 和 Windows 2000 中,它指定一次分配的物理内存量。提交的虚拟内存导致空间被保留在页面文件中。更高的 commit 值在应用程序需要更多堆栈空间时可节省时间,但会增加内存需求并有可能延长启动时间。以十进制或 C 语言表示法指定 reserve 值和 commit 值。设置堆栈大小的另一种方法是使用模块定义 (.def) 文件中的 STACKSIZE 语句。如果两者都指定,则 STACKSIZE 重写堆栈分配 (/STACK) 选项。可以使用 EDITBIN 工具在生成 .exe 文件之后更改堆栈。在 Visual Studio 开发环境中设置此链接器选项 打开此项目的“属性页”对话框。有关详细信息,请参见设置 Visual C++ 项目属性。 
    单击“链接器”文件夹。 
    单击“系统”属性页。 
    修改下列任一属性: 
    堆栈提交大小 
    堆栈保留大小 
    以编程方式设置此链接器选项请参见 StackCommitSize 和 StackReserveSize 属性。请参见
      

  3.   

    EDITBIN 参考请参见
    C/C++ 生成工具
    Microsoft COFF 二进制文件编辑器 (EDITBIN.EXE) 修改 32 位通用对象文件格式 (COFF) 二进制文件。可以使用 EDITBIN 修改对象文件、可执行文件和动态链接库 (DLL)。注意   EDITBIN 仅从命令行运行。
    EDITBIN 不可用于由 /GL 编译器选项产生的文件。对由 /GL 产生的二进制文件所做的任何修改必须通过重新编译和链接才能实现。 EDITBIN 命令行 
    EDITBIN 选项 
    请参见
    C/C++ 生成工具