Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.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# 使用IDispatch::Invoke反转PInvoke 我正在从非托管C++到C语言进行反向调用。我不想为此使用C++/CLI。我想用非托管C++和C语言来完成这一工作。_C#_C++_Pinvoke_Reverse_Intptr - Fatal编程技术网

C# 使用IDispatch::Invoke反转PInvoke 我正在从非托管C++到C语言进行反向调用。我不想为此使用C++/CLI。我想用非托管C++和C语言来完成这一工作。

C# 使用IDispatch::Invoke反转PInvoke 我正在从非托管C++到C语言进行反向调用。我不想为此使用C++/CLI。我想用非托管C++和C语言来完成这一工作。,c#,c++,pinvoke,reverse,intptr,C#,C++,Pinvoke,Reverse,Intptr,我需要将指向结构的指针传递给C#。我在这个StackOverflow线程上读到--我可以使用IntPtr来做这件事 这是我的托管方法签名 public int Start(字符串commandName,IntPtr a) { .... } 我使用IDispatch::Invoke方法从本机代码中调用它。我这样构造disparams VARIANT pVarArgs[2]; BSTR bstrCommandName = NULL; pVarArgs[0].vt = VT_INT| VT_PTR;

我需要将指向结构的指针传递给C#。我在这个StackOverflow线程上读到--我可以使用IntPtr来做这件事

这是我的托管方法签名 public int Start(字符串commandName,IntPtr a) { .... }

我使用IDispatch::Invoke方法从本机代码中调用它。我这样构造disparams

VARIANT pVarArgs[2];
BSTR bstrCommandName = NULL;
pVarArgs[0].vt = VT_INT| VT_PTR; // | VT_BYREF;
pVarArgs[0].pintVal = reinterpret_cast<int*>(context); //context is a pointer to a structure. 

pVarArgs[1].vt = VT_BSTR;
pVarArgs[1].bstrVal = bstrCommandName;    // Allocated elsewhere
DISPPARAMS dispparamsTwoArgs = {pVarArgs, NULL, 2};
//Invoke the method on the Dispatch Interface
hr = pDisp->Invoke(
                    dispid,
                    IID_NULL,
                    LOCALE_SYSTEM_DEFAULT,
                    DISPATCH_METHOD,
                    &dispparamsTwoArgs,
                    &varResult,
                    &exception,
                    &uArgErr
);
变体pVarArgs[2];
BSTR bstrCommandName=NULL;
pVarArgs[0]。vt=vt_INT | vt_PTR;//比雷夫;
pVarArgs[0].pintVal=reinterpret_cast(上下文)//上下文是指向结构的指针。
pVarArgs[1].vt=vt\u BSTR;
pVarArgs[1]。bstrVal=bstrCommandName;//分配到其他地方
DISPPARAMS dispparamsTwoArgs={pVarArgs,NULL,2};
//调用分派接口上的方法
hr=pDisp->Invoke(
dispid,
IID_NULL,
区域设置\系统\默认设置,
调度方法,
&dispparamsTwoArgs,
&varResult,
&例外情况,
&乌拉尔
);
这是我得到的错误代码-0x80070057

我的问题如下 1.有没有比使用IDispatch::Invoke更好的方法来反转PInvoke?

2.如果IDispatch::Invoke是执行此操作的最佳方法,那么如何修复此错误?我需要将指向结构的指针从本机世界传递到托管世界

你正在走向一个充满伤害的世界。使用C++代码中的“导入”指令。我认为你不能这样把C++结构传递给C语言。您是否尝试过传递简单参数,如整数或布尔值?