문제

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
}

내가 얻는 오류 코드는 -2146233032이며, corerror.h에 따르면 :

10 진수 -2146233032 / hex 0x80131538 :
COR_E_SAFEARRAYRANKMISMATCH
배열의 런타임 순위와 메타 데이터에 기록 된 순위간에 불일치가 발생했습니다.

누구든지 문제를 볼 수 있습니까?

도움이 되었습니까?

해결책

두 경우 모두 SafeArrayCreateVector의 두 번째 매개 변수가 0이어야합니까? MSDN은 해당 값을 "배열의 하한. 음수 일 수 있습니다"라고 나열합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top