26.12.2006, 15:53 | #21 |
Участник
|
нет ((
ругается на то что аргумент опущен |
|
26.12.2006, 16:02 | #22 |
Участник
|
Откройте Excel (или Word), вызовите VBA (ALT+F11). Вызовите Tools/References. Найдите там вашу библиотеку. Поставьте для нее галку и нажмите Ok. Откройте Object Browser [F2]. Выберите в списке библиотеку. Выберите интерфейс и метод - посмотрите список передаваемых параметров и возвращаемое значение
__________________
Axapta v.3.0 sp5 kr2 |
|
26.12.2006, 16:11 | #23 |
Участник
|
Function LinkTest(vfCptModel) As Integer
|
|
26.12.2006, 16:21 | #24 |
Участник
|
Не уверен, но попробуйте так
X++: ComDispFunction funcGet; COMVariant varRet1; COMVariant varRet2; ... funcGet = new ComDispFunction(com, "LinkTest", COMDispContext::Method); varRet1 = new COMVariant(COMVariantInOut::OUT_RETVAL, COMVariantType::VT_BSTR); varRet2 = new COMVariant(COMVariantInOut::OUT_RETVAL, COMVariantType::VT_INT); funcGet.call(varRet1, varRet2); data = varRet.bStr();
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: Logger (1). |
26.12.2006, 16:31 | #25 |
Участник
|
Указанный аргумент [retval] должен быть последним параметром в вызове метода 'LinkTest'
|
|
26.12.2006, 16:33 | #26 |
Участник
|
умаялсо. хотел сделать красиво. но, видимо, придётся делать через внешний временный файл.
огромное спасибо за участие ) |
|
26.12.2006, 16:34 | #27 |
Участник
|
Попробуйте для varRet1 установить COMVariantInOut::Out
__________________
Axapta v.3.0 sp5 kr2 |
|
26.12.2006, 16:45 | #28 |
Участник
|
говорит, что не может преобразовать один или более аргументов
|
|
26.12.2006, 20:28 | #29 |
Участник
|
Вы можете вызвать его через VB/VBA? И выложить здесь? Тогда останется перевести на X++ ваш код - с чем вам здесь помогут. Или, второй вариант, саму компоненту выложить? А то тема в стиле "угадает ли AndyD, что кушает ваш зверь?" не дала быстрого результата
|
|
27.12.2006, 09:29 | #30 |
Участник
|
c dll'ками шёл пример. вот шмат макроса из экселевского примера:
X++: Dim Cpt As Object Private Sub LinkTestMacros() 'Проверка связи Dim CptModel As Variant le = Cpt.LinkTest(CptModel) If (le <> 0) Then ActiveSheet.Cells(11, 7) = "Ошибка" ActiveSheet.Cells(12, 7) = Str(le) Exit Sub Else ActiveSheet.Cells(11, 7) = "CPT" ActiveSheet.Cells(12, 7) = CStr(CptModel) End If End Sub |
|
27.12.2006, 09:45 | #31 |
Участник
|
Еще один вариант
X++: ComVariant var = new ComVariant(ComVariantInOut::out, ComVariantType::VT_Variant); ComVariant var1 = new ComVariant(ComVariantInOut::out, ComVariantType::VT_BSTR); ; ... var.variant(var1); res = com.LinkTest(var); data = var1.bStr(); info(data);
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: gl00mie (3). |
27.12.2006, 09:57 | #32 |
Участник
|
алилуйа...
не знаю, как выразить Вам свою благодарность ) |
|
27.12.2006, 10:46 | #33 |
Участник
|
Если кому интересно, прототип функции IDL выглядит примерно так
X++: HRESULT _stdcall LinkTest([out] VARIANT * vfCptModel, [out, retval] int * Ret ); Если бы использовалась просто строка X++: HRESULT _stdcall LinkTest([out] BSTR * vfCptModel, [out, retval] int * Ret ); X++: ComVariant var1 = new ComVariant(ComVariantInOut::out, ComVariantType::VT_BSTR);
;
...
res = com.LinkTest(var1);
data = var1.bStr();
info(data);
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: Dimonishe (1). |
29.01.2007, 20:17 | #34 |
Участник
|
сейчас вот тоже страдаю с этим же самым COM объектом. Спасибо большое. Сэкономили кучу времени и нервов. Потому как linkTest у меня тоже не работал.
Только вот теперь другая проблема.. Пытаемся добавить запись. Описание функции из VBA Function AddRecord(nTsdFieldCount As Integer, Field1, Field2, Field3, Field4, Field5, Field6, Field7, Field8) As Integer есстественно вот это не работает X++: com.AddRecord(3,"123","1","0") похоже придется опять что-то шаманить с variantom. навскидку X++: ComVariant var2 = new ComVariant(ComVariantInOut::In, ComVariantType::VT_Variant); ComVariant var3 = new ComVariant(ComVariantInOut::In, ComVariantType::VT_INT); var3.int(3); var2.variant(var3); Cpt.AddRecord(var2,"1","0"); теперь вот думаю как получить IDL прототипа? а? |
|
30.01.2007, 13:14 | #35 |
Участник
|
Откройте Ваш ocx файл утилитой OleView из MS Visual Studio, там все будет написано
|
|
|
За это сообщение автора поблагодарили: Logger (1). |