Ошибка при вызове метода ActiveX в программе на VB .NET
От: sstep  
Дата: 14.09.05 18:25
Оценка:
Добрый день!

Имеется 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 — то
возникает эта — же ошибка.)

Спасибо.
Re: Ошибка при вызове метода ActiveX в программе на VB .NET
От: IvanDunaev  
Дата: 15.09.05 00:34
Оценка:
Здравствуйте, sstep, Вы писали:

S>"An unhandled exception of type 'System.Runtime.InteropServices.COMException' occurred in mscorlib.dll

S>Additional information: Unknown error".
S>Ошибку вызывает второй парметр tt.
S>Эта ошибка не возникает если tt = Nothing.
S>В чём тут фокус? Почему возникает ошибка?

вот здесь все подробно расписано: Default Marshaling for Objects &mdash; Marshaling ByRef Variants
Re[2]: Ошибка при вызове метода ActiveX в программе на VB .N
От: sstep  
Дата: 19.09.05 17:38
Оценка:
Здравствуйте, IvanDunaev, Вы писали:

ID>Здравствуйте, sstep, Вы писали:


S>>"An unhandled exception of type 'System.Runtime.InteropServices.COMException' occurred in mscorlib.dll

S>>Additional information: Unknown error".
S>>Ошибку вызывает второй парметр tt.
S>>Эта ошибка не возникает если tt = Nothing.
S>>В чём тут фокус? Почему возникает ошибка?

ID>вот здесь все подробно расписано: Default Marshaling for Objects &mdash; Marshaling ByRef Variants


Большое спасибо за информацию. Изучаю. Кстати, обратившись в фирму 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, в нём же возвращается значение фазы в конце вычислений) их AciveX CWDSP — получил ответ, что ошибка исчезнет, если при вызове из VB ,NET Phase=Nothing??? Т.е. они ничего не предложили и не объяснили.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.