Имеется ActiveX, созданный в Visual C++(v6) с использованием MFC, в котором
имеется следующий метод(для примера):
VARIANT CMyVCActivXControlCtrl::Test2(VARIANT FAR& p1, VARIANT FAR* InpVal)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
VARIANT vaResult;
VariantInit(&vaResult);
// TODO: Add your dispatch handler code here
HRESULT res;
res = VariantCopy(&vaResult, const_cast<VARIANT FAR*> (InpVal));
if(res != S_OK)
{
AfxMessageBox("Err! VariantCopy");
}
return vaResult;
}
Если использовать этот ActiveX в приложениях, написанных на языках Visual Studio 6 или
в приложения MS Office(VBA), то всё OK.
Однако, при вызове этого метода в приложениях написанных на Visual Basic .NET или
C# :
Dim res As Object
Dim kk As Object
Dim tt As Object
kk=1.
tt=10
res = AxMyVCActivXControl1.Test2(kk,tt)
возникает ошибка:
"An unhandled exception of type 'System.Runtime.InteropServices.COMException' occurred in mscorlib.dll
Additional information: Unknown error".
Ошибку вызывает второй парметр tt.
Эта ошибка не возникает если tt = Nothing.
В чём тут фокус? Почему возникает ошибка?
(Аналогичная проблема возникает при использовании в .NET ActiveX — CWDSP из
Component Works фирмы National instruments. Метод этого компонента —
Public Overridable Function SineWave(ByVal n As Object, ByVal Amp As Object, ByVal f As Object, ByRef Phase As Object) As Object.
Так вот если вызывать эту функцию с параметром Phase знчение которого отлично от Nothing — то
возникает эта — же ошибка.)