Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C+中运行C#dll函数时出现模糊错误+; 当我尝试使用C++的C语言的DLL时,我可以成功地导入它。然而,当我运行一个函数时,我得到了一个模糊的错误: DLL测试Open.EXE中的0x76E8C632中的代码未处理异常:微软C++异常:内存位置0x00 76F524的μCo错误。发生_C#_C++_Dll_Dllimport - Fatal编程技术网

在C+中运行C#dll函数时出现模糊错误+; 当我尝试使用C++的C语言的DLL时,我可以成功地导入它。然而,当我运行一个函数时,我得到了一个模糊的错误: DLL测试Open.EXE中的0x76E8C632中的代码未处理异常:微软C++异常:内存位置0x00 76F524的μCo错误。发生

在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

我试过搜索,但什么也没找到,因为它太模糊了

DLL代码:

// 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;
}