|
|
|
dll c фомой как ее открыть в VB
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Очень прошу о помощи! Нам прислали dll файл написанный на с++ и примеры на дельфи и с++ как им пользоваться, никогда не работал ни на с++ ни на дельфи... уже 3 день ломаю голову как этохозяйство заставить работать в VB Выкладываю это хозяйство с надеждой что мож кто нить поможет разобраться... dll regsrv32 не регистрируется Библиотека CKUtils.dll содержит следующие COM-объекты: RTDBDialogs – набор функций Имя класса CKUtils.RTDBDialogs GIUD {98F8F2CE-B435-4996-969C-AFDAB7A4A50B} Объект реализует интерфейс IRTDBDialogs: [ uuid(C7DB1670-CF32-4D3E-9865-1528D6DDD1C1), version(1.0), helpstring("Dispatch interface for RTDBDialogs Object"), dual, oleautomation ] interface IRTDBDialogs: IDispatch { [propput, id(0x000000C9)] HRESULT _stdcall AppHandle([in] long Param1 ); [propput, id(0x000000CA)] HRESULT _stdcall Connection([in] _Connection * Param1); [propput, id(0x000000CB)] HRESULT _stdcall RTDBConId([in] long Param1 ); [id(0x000000CC)] HRESULT _stdcall DecodeDR([in] VARIANT_BOOL IsFrml, [in] BSTR DR, [in] long Time, [in] VARIANT_BOOL Modal ); [id(0x000000CD)] HRESULT _stdcall OIPassport([in] long Cat, [in] long Id, [in] long Time, [in] VARIANT_BOOL Modal ); [id(0x000000CE)] HRESULT _stdcall ShowOIData([in] long Cat, [in] long Id, [in] VARIANT_BOOL Modal ); [id(0x000000CF)] HRESULT _stdcall SelectDomain([in] BSTR Caption, [out, retval] BSTR * Result ); [id(0x000000D0)] HRESULT _stdcall SelectRTDB([out, retval] BSTR * Result ); [id(0x000000D1)] HRESULT _stdcall SelectSQL([in] VARIANT_BOOL AskDB, [in] BSTR DefDB, [out, retval] BSTR * Result ); [id(0x000000D2)] HRESULT _stdcall SetRuch([in] long Cat, [in] long Id, [in] RuchModeEnum Mode, [out, retval] VARIANT_BOOL * Result ); [id(0x000000D3)] HRESULT _stdcall ResetRuch([in] long Cat, [in] long Id, [out, retval] VARIANT_BOOL * Result ); [propget, id(0x000000D4)] HRESULT _stdcall EventKey([out, retval] long * Value ); [id(0x000000D6)] HRESULT _stdcall IsDomainAccessible([in] BSTR Domain, [out, retval] VARIANT_BOOL * Result ); }; Пример на Delphi: uses CKUtils_TLB, ADODB_TLB; var Rtdbdlg: IRTDBDialogs; s: string; begin RTDBDlg:=CoRTDBDialogs.Create; RTDBDlg.AppHandle:=Application.Handle; RTDBDlg.RTDBConId:=ConId; RTDBDlg.Connection:=ADOConnection1.ConnectionObject as ADODB_TLB._Connection; s:= RTDBDlg.SelectSQL(True, ‘OIK’); RTDBDlg:=nil; end; Пример на C++ Builder: #include “Ckutils_tlb.h” { IRTDBDialogs* a = NULL; CoCreateInstance(CLSID_RTDBDialogs, NULL, CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER, IID_IRTDBDialogs, (void**)&a); if (a!=NULL) { a->AppHandle = (long)Application->Handle; Adodb_tlb::Connection15* x = NULL; Con->ConnectionObject->QueryInterface(Adoint::IID_Connection15, (void**)&x); a->Connection = x; a->OIPassport(73, 20, 0, True); } a = NULL; } Для добавления в проект модуля CKUtils_TLB следует импортированть библиотеку типов CKUtils (Project | Import Type Library) PS. на vb не приходилось подключать самописные dll-ки... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2006, 14:09 |
|
||
|
dll c фомой как ее открыть в VB
|
|||
|---|---|---|---|
|
#18+
Судя по тому, что это ActiveX dll, заходишь в референсы, browse, находишь эту длл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2006, 14:17 |
|
||
|
dll c фомой как ее открыть в VB
|
|||
|---|---|---|---|
|
#18+
AntonariyСудя по тому, что это ActiveX dll, заходишь в референсы, browse, находишь эту длл. Я так сделал. Sub Main() Dim Rtdbdlg As CKUtils.RTDBDialogs Dim s As String s = Rtdbdlg.SelectSQL(True, "OIK") End Sub Тута выдает ошибку 91 object variable or with block variable not set я с dll самописными не работал кроме как с офисными, плиз если есть возможность подскажите как заставить работать тот кусок кода который я написал выше... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2006, 14:31 |
|
||
|
dll c фомой как ее открыть в VB
|
|||
|---|---|---|---|
|
#18+
Юрик# Sub Main() Dim Rtdbdlg As CKUtils.RTDBDialogs Dim s As String s = Rtdbdlg.SelectSQL(True, "OIK") End Sub Тута выдает ошибку 91 object variable or with block variable not set а если так попробовать: Sub Main() Dim Rtdbdlg As New CKUtils.RTDBDialogs Dim s As String s = Rtdbdlg.SelectSQL(True, "OIK") End Sub что получится? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2006, 14:45 |
|
||
|
dll c фомой как ее открыть в VB
|
|||
|---|---|---|---|
|
#18+
попробуй так Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2006, 14:45 |
|
||
|
dll c фомой как ее открыть в VB
|
|||
|---|---|---|---|
|
#18+
Попробывал 2 примера в обоих случаях пишет ошибку 429 ActiveX component can't created object ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2006, 14:54 |
|
||
|
dll c фомой как ее открыть в VB
|
|||
|---|---|---|---|
|
#18+
Юрик#, Во-первых, dll должна-таки бы регистрироваться через regsvr32 или вызовом DllRegisterServer() (что, впрочем, regsvr32 и делает). Я не понял фразу "dll regsrv32 не регистрируется". Не указано, что надо регистрировать, в документации? regsrv32 - это опечатка? Возникает ошибка при исполнении regsvr32? Какая? Во-вторых, вроде бы не все COM-объекты могут быть созданы через New. Попробуй через CreateObject("CKUtils.RTDBDialogs"). В-третьих, можно и через CoCreateInstance() попытаться, но попробуй второе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2006, 16:10 |
|
||
|
dll c фомой как ее открыть в VB
|
|||
|---|---|---|---|
|
#18+
попробуй так Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2006, 16:22 |
|
||
|
dll c фомой как ее открыть в VB
|
|||
|---|---|---|---|
|
#18+
vkodor, вряд ли GetObject("путь к файлу", "CKUtils.RTDBDialogs") поможет, т.к. "путь к файлу" - в данном случае путь к dll, а какое приложение ассоциировано с dll? К тому же, здесь нужен CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER, а так получится не INPROC. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2006, 16:34 |
|
||
|
dll c фомой как ее открыть в VB
|
|||
|---|---|---|---|
|
#18+
БенедиктЮрик#, Во-первых, dll должна-таки бы регистрироваться через regsvr32 или вызовом DllRegisterServer() (что, впрочем, regsvr32 и делает). Я не понял фразу "dll regsrv32 не регистрируется". Не указано, что надо регистрировать, в документации? regsrv32 - это опечатка? Возникает ошибка при исполнении regsvr32? Какая? Во-вторых, вроде бы не все COM-объекты могут быть созданы через New. Попробуй через CreateObject("CKUtils.RTDBDialogs"). В-третьих, можно и через CoCreateInstance() попытаться, но попробуй второе. regsrv32 это опечатка Запускаю regsvr32.exe CKUtils.dll появляется ошибка Ошибка при вызове LoadLibrary("CKUtils.dll") - Не найден указанный модуль ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2006, 06:19 |
|
||
|
dll c фомой как ее открыть в VB
|
|||
|---|---|---|---|
|
#18+
3 вариант Sub Main() Dim Rtdbdlg As Object Dim s As String Set Rtdbdlg = GetObject("c:\1\CKUtils.dll", "CKUtils.RTDBDialogs") s = Rtdbdlg.SelectSQL(True, "OIK") End Sub '4 вариант Sub Main() Dim Rtdbdlg As Object Dim s As String Set Rtdbdlg = CreateObject("CKUtils.RTDBDialogs") s = Rtdbdlg.SelectSQL(True, "OIK") End Sub Запускал и 3 и 4 вариант (при этом в референсе была подключена и выключена CKUtils.dll) во всех случаях появляется ошибка 429 ActiveX component can't created object авторvkodor, вряд ли GetObject("путь к файлу", "CKUtils.RTDBDialogs") поможет, т.к. "путь к файлу" - в данном случае путь к dll, а какое приложение ассоциировано с dll? К тому же, здесь нужен CLSCTX_INPROC_SERVER |CLSCTX_LOCAL_SERVER, а так получится не INPROC. а ведь эти параметры встречаются в примере для с++ CoCreateInstance(CLSID_RTDBDialogs, NULL, CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER, IID_IRTDBDialogs, (void**)&a); еще в документации встречается такая строка Для добавления в проект модуля CKUtils_TLB следует импортированть библиотеку типов CKUtils (Project | Import Type Library) Может это подскажет что с dll делать в vb я ничего подобного на нашел... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2006, 06:41 |
|
||
|
dll c фомой как ее открыть в VB
|
|||
|---|---|---|---|
|
#18+
ЮрикЗапускаю regsvr32.exe CKUtils.dll появляется ошибка Ошибка при вызове LoadLibrary("CKUtils.dll") - Не найден указанный модуль Ну, вот, библиотека не зарегистрирована. Запускать regsvr32.exe надо из того каталога, где находится CKUtils.dll, или указывать полный путь, например: regsvr32.exe "C:\Program Files\CKUtils\CKUtils.dll" В VB библиотека типов подключается через пункт меню Project\References... Библиотека типов может находиться как в отдельном файле (.tlb, .olb), так и в виде ресурса в исполняемом файле (.exe, .dll, .ocx). Впрочем, если библиотека нормально зарегистрирована (см. выше), она уже должна быть в списке (только список большой, можно и не найти слёту), и кнопку "Browse..." жать не надо. После подключения можно нажать F2, и посмотреть в Object Browser, появилась ли она, видны ли её классы-методы-перечисления. Хотя, если ты дошёл до ошибки 429, библиотеку типов ты уже подключил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2006, 11:02 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=34229804&tid=2164735]: |
0ms |
get settings: |
9ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
182ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 229ms |
| total: | 506ms |

| 0 / 0 |
