在C+中运行C#dll函数时出现模糊错误+; 当我尝试使用C++的C语言的DLL时,我可以成功地导入它。然而,当我运行一个函数时,我得到了一个模糊的错误: DLL测试Open.EXE中的0x76E8C632中的代码未处理异常:微软C++异常:内存位置0x00 76F524的μCo错误。发生
我试过搜索,但什么也没找到,因为它太模糊了 DLL代码:在C+中运行C#dll函数时出现模糊错误+; 当我尝试使用C++的C语言的DLL时,我可以成功地导入它。然而,当我运行一个函数时,我得到了一个模糊的错误: DLL测试Open.EXE中的0x76E8C632中的代码未处理异常:微软C++异常:内存位置0x00 76F524的μCo错误。发生,c#,c++,dll,dllimport,C#,C++,Dll,Dllimport,我试过搜索,但什么也没找到,因为它太模糊了 DLL代码: // Interface declaration. [Guid("32529FAE-6137-4c62-9945-DE4198FA9D1B")] [InterfaceType(ComInterfaceType.InterfaceIsDual)] public interface ICalculator { [DispId(1)] void Add(int Number1, int Number2, IntPtr resul
// Interface declaration.
[Guid("32529FAE-6137-4c62-9945-DE4198FA9D1B")]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface ICalculator
{
[DispId(1)]
void Add(int Number1, int Number2, IntPtr results);
};
// Interface implementation.
[Guid("9F2F180D-94A9-47e6-91CC-6BCFABD1DDEB")]
[ClassInterface(ClassInterfaceType.None)]
[ProgId("ManagedDLL.ManagedClass")]
public class ManagedClass : ICalculator
{
public void Add(int Number1, int Number2, IntPtr results)
{
long sum = Number1 + Number2;
Marshal.StructureToPtr(sum, results, false);
}
}
运行代码(C++):
请帮我做这个
谢谢。< /P> C++使用三个参数,结果是第三个参数,这不等于返回值。当参数在执行堆栈上时,返回值在微处理器AX寄存器中。@jdweng在这种情况下,我应该做什么?尝试以下操作:public void Add(int Number1,int Number2,IntPtr results){long sum=Number1+Number2;Marshal.StructureToPtr(sum,results,false);}JDWEN是否C++代码保持不变?VS告诉我C中的
IntPtr
只是一个普通的long
在C++中,IntPtr是任何类型的4个字节。对于Windows 7及更高版本,最新版本的Net的长度为8字节。WindowsXP是4字节整数,C++使用三个参数,结果是第三个参数,这不等于返回值。当参数在执行堆栈上时,返回值在微处理器AX寄存器中。@jdweng在这种情况下,我应该做什么?尝试以下操作:public void Add(int Number1,int Number2,IntPtr results){long sum=Number1+Number2;Marshal.StructureToPtr(sum,results,false);}JDWEN是否C++代码保持不变?VS告诉我C中的IntPtr
只是一个普通的long
在C++中,IntPtr是任何类型的4个字节。对于Windows 7及更高版本,最新版本的Net的长度为8字节。WindowsXP是4字节整数。
int main()
{
// Initialize COM.
HRESULT hr = CoInitialize(NULL);
// Create the interface pointer.
ICalculatorPtr pICalc(__uuidof(ManagedClass));
long lResult = 0;
long firstNum = 1;
long secondNum = 2;
// Call the Add method.
pICalc->Add(firstNum, secondNum,lResult);
// Uninitialize COM.
CoUninitialize();
return 0;
}