2008-12-02 8 views
3

Je suis en train d'accueillir le CLR dans mon application C++ et je vais avoir des problèmes en invoquant le point de l'application gérée d'entrée. Le point d'entrée est définie comme d'habitude:CLR Hébergement - paramètres Bad

static void Main(string[] args) 

Et voici le code réel 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 
} 

Le code d'erreur que je reçois est -2146233032, qui selon corerror.h correspond à:

pour -2146233032 décimal/hex 0x80131538:
COR_E_SAFEARRAYRANKMISMATCH
Un décalage est produite entre le rang d'exécution de la matrice et le rang enregistré dans les métadonnées.

Quelqu'un peut-il voir le problème?

Répondre

3

ne devrait pas le second paramètre à SafeArrayCreateVector 0 dans les deux cas? MSDN répertorie cette valeur en tant que «limite inférieure pour le tableau peut être négatif».

+0

Vous pouvez avoir raison, va essayer quand je rentre chez moi. – arul

+0

Après avoir réglé le deuxième paramètre à 0 dans les deux cas, le message d'erreur a changé à: -2147352562/hex 0x8002000e: COR_E_TARGETPARAMCOUNT corerror.h Il y avait un décalage entre le nombre d'arguments fournis et le nombre prévu. – arul

+0

Jamais esprit, votre solution a fonctionné. – arul