Zu 2)
Versuche auf C-Seite erst gar nicht sowas zu machen:
Ja nach Compiler wird daraus intern unter Umständen:
Code:
void Foo(..., BSTR *AResult)
oder
Code:
void Foo(BSTR *AResult, ...)
Man sollte nur void oder Ordinaltypen zurückgeben:
Code:
void Foo(..., BSTR *AResult)
Code:
DWORD Foo(..., BSTR *AResult)
Code:
HRESULT Foo(..., BSTR *AResult)