Здравствуйте, <Аноним>, Вы писали:
А>НО!!! Мне нужно обращаться к СОМ находящийся на сервере в сети.
А>В этом случае на сколько я знаю, ПОЗДНЕЕ СВЯЗЫВАНИЕ НЕОБХОДИМО.
отнюдь. Если сделать как описано здесь —
http://rsdn.ru/article/com/COMvs.xmlАвтор(ы): Чистяков В.Ю.
Эта статья входит в цикл "COM vs. CORBA" и знакомит читателя с основами COM, начиная с интерфейса IUnknown
и заканчивая маршалингом, DCOM и COM+.
в "Установление связи с удаленным объектом" (победив все заморочки с безопасностью, хотя они в общем-то не зависят от типа связывания), то для приложения-клиента работа с удаленным COM-сервером ничем не отличается от работы с локальным.
... << RSDN@Home 1.2.0 alpha rev. 654>>
Привет, Всем!
В принципе из название следует пояснить.
Сущ COM на VC.NET 2003(ATL).
Из C# поздним связыванием обращаюсь к СОМ.
[code]int[code]овые переменные передаются, а как быть с массивом???
Помогите, мужики, чем можите...
Здравствуйте, <Аноним>, Вы писали:
А>Привет, Всем!
А>В принципе из название следует пояснить.
А>Сущ COM на VC.NET 2003(ATL).
А>Из C# поздним связыванием обращаюсь к СОМ.
А>[code]int[code]овые переменные передаются, а как быть с массивом???
А>Помогите, мужики, чем можите...
с поздним связыванием не заморачивался, так что чем смогу
COM:
-idl:
[id(2), helpstring("method GetBinary2")]
HRESULT GetBinary2([out,retval] SAFEARRAY(BYTE) *arr);
-cpp:
STDMETHODIMP CTestInterface::GetBinary2(SAFEARRAY* *arr)
{
BYTE src[2][3] = {1,2,3,4,5,6};
LPVOID theBytes = NULL;
CComSafeArrayBound bound[2];
bound[0].SetCount(3);
bound[0].SetLowerBound(0);
bound[1].SetCount(3);
bound[1].SetLowerBound(0);
CComSafeArray<BYTE> NewArray(bound, 2);
SafeArrayAccessData( *NewArray.GetSafeArrayPtr(), &theBytes );
memcpy( theBytes, src, sizeof(src) );
SafeArrayUnaccessData( *NewArray.GetSafeArrayPtr() );
*arr = NewArray.Detach();
return S_OK;
}
далее:
tlbimp.exe comserver.dll /out:comservernet.dll
/sysarray
добавляем comservernet.dll в References проекта на C#,
-С#:
using comservernet;
. . .
private void button2_Click(object sender, EventArgs e)
{
TestInterface testobj = new TestInterface();
Array arr = testobj.GetBinary2();
resultlabel.Text = "";
int dims = arr.Rank;
for( int dim=0; dim < dims; dim++)
{
int count = arr.GetLength(dim);
for( int n=0; n < count; n++)
{
resultlabel.Text += arr.GetValue(n, dim).ToString() + ", ";
}
resultlabel.Text += "\n";
}
}
... << RSDN@Home 1.2.0 alpha rev. 655>>
Здравствуйте, Odi$$ey, Вы писали:
OE>Здравствуйте, <Аноним>, Вы писали:
А>>Привет, Всем!
А>>В принципе из название следует пояснить.
А>>Сущ COM на VC.NET 2003(ATL).
А>>Из C# поздним связыванием обращаюсь к СОМ.
А>>[code]int[code]овые переменные передаются, а как быть с массивом???
А>>Помогите, мужики, чем можите...
OE>с поздним связыванием не заморачивался, так что чем смогу
Большое спасибо!!!
Это работает!
НО!!! Мне нужно обращаться к СОМ находящийся на сервере в сети.
В этом случае на сколько я знаю, ПОЗДНЕЕ СВЯЗЫВАНИЕ НЕОБХОДИМО.
Читаю Троелсена, но что-то пока никак...
Здесь есть программисты???