2017-07-12 4 views
0

Ich habe ein C++ COM-DLL-Projekt und die folgende Funktion funktioniert einwandfrei, wenn sie von ihrem COM-Objekt in einer VB-Skriptdatei aufgerufen wird.WScript.CreateObject gibt beim Aufrufen einer C++ COM-DLL-Funktion leer

[id(1)] HRESULT ShowMessage([in] BSTR sMessage, BSTR sTitle); //<< .IDL File 

STDMETHOD(ShowMessage)(BSTR sMessage, BSTR sTitle); //<< Header File 

STDMETHODIMP CFoo::ShowMessage(BSTR sMessage, BSTR sTitle) //<< C++ Source File 
{ 
    MessageBox(0, CString(sMessage), CString(sTitle), 0); 
    return S_OK; 
} 

Above Funktion funktioniert gut, wenn ich es von VB Script wie folgt aufrufen:

Dim Test: Set Test = WScript.CreateObject("VbsEvents.dll") 
Test.ShowMessage "Hello World!", "Windows Script Host" 

jedoch Wenn ich Funktion deklarieren wie unten:

[id(2)] HRESULT Add([in] int Value1, int Value2, [out] int *ReturnValue); //<< .IDL File 

STDMETHOD(Add)(int Value1, int Value2, int *ReturnValue); //<< Header File 

STDMETHODIMP CFoo::Add(int Value1, int Value2, int *ReturnValue) //<< C++ Source File 
{ 
    *ReturnValue = Value1 + Value2; 
    return S_OK; 
} 

und nennen es von VB Script wie:

Dim Return: Test.Add 1, 2, CInt(Return) 
WScript.Echo CStr(Return) 

Ich behalte es wird nichts gechattet und ich erwarte, dass dies als Ergebnis 3 widerhallt. Ich kann nicht herausfinden, warum diese Funktion in VB Script nicht funktioniert.

Jede Hilfe wird geschätzt, um herauszufinden, was der Grund dafür ist, dass dieser VB Script Code nichts widergibt.

+0

Warum '[out]' wird nicht mit VB Script zu arbeiten? Ich habe sogar 'Dim Return: Return = Test.Add 1, 2, CInt (" ")' und 'WScript.Echo CStr (Return)' versucht. Das echot gar nichts! :-( – Blueeyes789

+0

Kann VB Script keine Ausgabewerte von COM Funktionen erhalten? – Blueeyes789

Antwort

1

Was Sie tun können, ist die Unterschrift von diesem diesem

[id(2)] HRESULT Add([in] int Value1, int Value2, [out, retval] int *ReturnValue); 

[id(2)] HRESULT Add([in] int Value1, int Value2, [out] int *ReturnValue); 

zu

IDL ändern, die hier sehr viel Sinn macht, weil es Wert semantisch eine Rückkehr. Informationen dazu finden Sie in der Dokumentation retval attribute.

Dann können Sie es wie folgt in VBScript rufen:

ret = Add(1, 2) 

Andernfalls dies auf byref in VBScript für mehr überprüfen: ByRef and ByVal in VBScript

+0

Vielen Dank! Es hat gut funktioniert! – Blueeyes789

Verwandte Themen