get_EntryPoint(&EntryPoint);//这个很好用 如果(失败(小时)) 返回人力资源; 安全阵列*参数= SafeArrayCreateVector(VT_变体,1,1);//创建长度为1的数组(Main(string[])) int-argc; LPWSTR cmdLine=GetCommandLineW(); LPWSTR*argv=CommandLineToArgvW(cmdLine,&argc);//获取此函数的参数数组 变异vtPsa; vtPsa.vt=(vt_数组| vt_BSTR); vtPsa.parray=SafeArrayCreateVector(VT_BSTR,1,argc);//创建一个字符串数组 用于(长i=0;iInvoke_3(obj、args和result);//调用入口点 } 捕获(_com_error ex) { MessageBox(NULL,例如ErrorMessage(),“Error”,0); } 如果(失败(小时)) { hr=hr;//添加只是为了设置断点 },c++,clr,clr-hosting,C++,Clr,Clr Hosting" /> get_EntryPoint(&EntryPoint);//这个很好用 如果(失败(小时)) 返回人力资源; 安全阵列*参数= SafeArrayCreateVector(VT_变体,1,1);//创建长度为1的数组(Main(string[])) int-argc; LPWSTR cmdLine=GetCommandLineW(); LPWSTR*argv=CommandLineToArgvW(cmdLine,&argc);//获取此函数的参数数组 变异vtPsa; vtPsa.vt=(vt_数组| vt_BSTR); vtPsa.parray=SafeArrayCreateVector(VT_BSTR,1,argc);//创建一个字符串数组 用于(长i=0;iInvoke_3(obj、args和result);//调用入口点 } 捕获(_com_error ex) { MessageBox(NULL,例如ErrorMessage(),“Error”,0); } 如果(失败(小时)) { hr=hr;//添加只是为了设置断点 },c++,clr,clr-hosting,C++,Clr,Clr Hosting" />

托管CLR-错误参数 我试图在我的C++应用程序中托管CLR,并且调用托管应用程序的入口点时遇到了一些问题。 入口点的定义与通常一样: static void Main(string[] args) 这里是实际的C++代码: CComPtr<_MethodInfo> entryPoint; hr = assembly->get_EntryPoint(&entryPoint); // this works just fine if (FAILED(hr)) return hr; SAFEARRAY *args = SafeArrayCreateVector(VT_VARIANT, 1, 1); // create an array of the length of 1 ( Main(string[]) ) int argc; LPWSTR cmdLine = GetCommandLineW(); LPWSTR *argv = CommandLineToArgvW(cmdLine, &argc); // get an array of arguments to this function VARIANT vtPsa; vtPsa.vt = (VT_ARRAY | VT_BSTR); vtPsa.parray = SafeArrayCreateVector(VT_BSTR, 1, argc); // create an array of strings for (long i = 0; i < argc; i++) { SafeArrayPutElement(vtPsa.parray, &i, SysAllocString(argv[i])); // insert the string from argv[i] into the safearray } long idx[1] = {0}; SafeArrayPutElement(args, idx, &vtPsa); // insert an array of BSTR into the VT_VARIANT args array VARIANT obj, result; VariantInit(&obj); VariantInit(&result); try { hr = entryPoint->Invoke_3(obj, args, &result); // call the entry point } catch(_com_error ex) { MessageBox(NULL, ex.ErrorMessage(), "Error", 0); } if(FAILED(hr)) { hr = hr; // added just so I can set a breakpoint } CComPtr入口点; hr=assembly->get_EntryPoint(&EntryPoint);//这个很好用 如果(失败(小时)) 返回人力资源; 安全阵列*参数= SafeArrayCreateVector(VT_变体,1,1);//创建长度为1的数组(Main(string[])) int-argc; LPWSTR cmdLine=GetCommandLineW(); LPWSTR*argv=CommandLineToArgvW(cmdLine,&argc);//获取此函数的参数数组 变异vtPsa; vtPsa.vt=(vt_数组| vt_BSTR); vtPsa.parray=SafeArrayCreateVector(VT_BSTR,1,argc);//创建一个字符串数组 用于(长i=0;iInvoke_3(obj、args和result);//调用入口点 } 捕获(_com_error ex) { MessageBox(NULL,例如ErrorMessage(),“Error”,0); } 如果(失败(小时)) { hr=hr;//添加只是为了设置断点 }

托管CLR-错误参数 我试图在我的C++应用程序中托管CLR,并且调用托管应用程序的入口点时遇到了一些问题。 入口点的定义与通常一样: static void Main(string[] args) 这里是实际的C++代码: CComPtr<_MethodInfo> entryPoint; hr = assembly->get_EntryPoint(&entryPoint); // this works just fine if (FAILED(hr)) return hr; SAFEARRAY *args = SafeArrayCreateVector(VT_VARIANT, 1, 1); // create an array of the length of 1 ( Main(string[]) ) int argc; LPWSTR cmdLine = GetCommandLineW(); LPWSTR *argv = CommandLineToArgvW(cmdLine, &argc); // get an array of arguments to this function VARIANT vtPsa; vtPsa.vt = (VT_ARRAY | VT_BSTR); vtPsa.parray = SafeArrayCreateVector(VT_BSTR, 1, argc); // create an array of strings for (long i = 0; i < argc; i++) { SafeArrayPutElement(vtPsa.parray, &i, SysAllocString(argv[i])); // insert the string from argv[i] into the safearray } long idx[1] = {0}; SafeArrayPutElement(args, idx, &vtPsa); // insert an array of BSTR into the VT_VARIANT args array VARIANT obj, result; VariantInit(&obj); VariantInit(&result); try { hr = entryPoint->Invoke_3(obj, args, &result); // call the entry point } catch(_com_error ex) { MessageBox(NULL, ex.ErrorMessage(), "Error", 0); } if(FAILED(hr)) { hr = hr; // added just so I can set a breakpoint } CComPtr入口点; hr=assembly->get_EntryPoint(&EntryPoint);//这个很好用 如果(失败(小时)) 返回人力资源; 安全阵列*参数= SafeArrayCreateVector(VT_变体,1,1);//创建长度为1的数组(Main(string[])) int-argc; LPWSTR cmdLine=GetCommandLineW(); LPWSTR*argv=CommandLineToArgvW(cmdLine,&argc);//获取此函数的参数数组 变异vtPsa; vtPsa.vt=(vt_数组| vt_BSTR); vtPsa.parray=SafeArrayCreateVector(VT_BSTR,1,argc);//创建一个字符串数组 用于(长i=0;iInvoke_3(obj、args和result);//调用入口点 } 捕获(_com_error ex) { MessageBox(NULL,例如ErrorMessage(),“Error”,0); } 如果(失败(小时)) { hr=hr;//添加只是为了设置断点 },c++,clr,clr-hosting,C++,Clr,Clr Hosting,我得到的错误代码是-2146233032,根据corerror.h对应于: 对于十进制-2146233032/十六进制 0x80131538: COR_E_safearrayrank不匹配 两个服务器之间出现不匹配 数组和列组的运行时列组 记录在元数据中 有人看到问题了吗?在这两种情况下,SafeArrayCreateVector的第二个参数不应该都是0吗?MSDN将该值列为“数组的下限。可以为负值。”在这两种情况下,将第二个参数设置为0后,错误消息更改为:-2147352562/hex 0x8

我得到的错误代码是-2146233032,根据corerror.h对应于:

对于十进制-2146233032/十六进制 0x80131538:
COR_E_safearrayrank不匹配
两个服务器之间出现不匹配 数组和列组的运行时列组 记录在元数据中


有人看到问题了吗?

在这两种情况下,SafeArrayCreateVector的第二个参数不应该都是0吗?MSDN将该值列为“数组的下限。可以为负值。”

在这两种情况下,将第二个参数设置为0后,错误消息更改为:-2147352562/hex 0x8002000e:COR_E_TARGETPARAMCOUNT corerror.h。提供的参数数量与预期数量不匹配。