powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / dll c фомой как ее открыть в VB
12 сообщений из 12, страница 1 из 1
dll c фомой как ее открыть в VB
    #34227933
Юрик#
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте!
Очень прошу о помощи!
Нам прислали 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-ки...
...
Рейтинг: 0 / 0
dll c фомой как ее открыть в VB
    #34227970
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Судя по тому, что это ActiveX dll, заходишь в референсы, browse, находишь эту длл.
...
Рейтинг: 0 / 0
dll c фомой как ее открыть в VB
    #34228031
Юрик#
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 самописными не работал кроме как с офисными, плиз если есть возможность подскажите как заставить работать тот кусок кода который я написал выше...
...
Рейтинг: 0 / 0
dll c фомой как ее открыть в VB
    #34228080
Nikz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Юрик#
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

что получится?
...
Рейтинг: 0 / 0
dll c фомой как ее открыть в VB
    #34228081
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробуй так
Код: plaintext
1.
2.
3.
4.
5.
Sub Main()
Dim Rtdbdlg As CKUtils.RTDBDialogs
Dim s As String
Set Rtdbdlg = New CKUtils.RTDBDialogs
s = Rtdbdlg.SelectSQL(True, "OIK")
End Sub
...
Рейтинг: 0 / 0
dll c фомой как ее открыть в VB
    #34228122
Юрик#
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробывал 2 примера в обоих случаях пишет ошибку 429

ActiveX component can't created object
...
Рейтинг: 0 / 0
dll c фомой как ее открыть в VB
    #34228408
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Юрик#,
Во-первых, dll должна-таки бы регистрироваться через regsvr32 или вызовом DllRegisterServer() (что, впрочем, regsvr32 и делает). Я не понял фразу "dll regsrv32 не регистрируется". Не указано, что надо регистрировать, в документации? regsrv32 - это опечатка? Возникает ошибка при исполнении regsvr32? Какая?
Во-вторых, вроде бы не все COM-объекты могут быть созданы через New. Попробуй через CreateObject("CKUtils.RTDBDialogs").
В-третьих, можно и через CoCreateInstance() попытаться, но попробуй второе.
...
Рейтинг: 0 / 0
dll c фомой как ее открыть в VB
    #34228458
vkodor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробуй так
Код: plaintext
1.
2.
3.
4.
5.
Sub Main()
Dim Rtdbdlg As Object
Dim s As String
Set Rtdbdlg = GetObject("путь к файлу", "CKUtils.RTDBDialogs")
s = Rtdbdlg.SelectSQL(True, "OIK")
End Sub
...
Рейтинг: 0 / 0
dll c фомой как ее открыть в VB
    #34228491
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vkodor,
вряд ли GetObject("путь к файлу", "CKUtils.RTDBDialogs") поможет, т.к. "путь к файлу" - в данном случае путь к dll, а какое приложение ассоциировано с dll? К тому же, здесь нужен CLSCTX_INPROC_SERVER |
CLSCTX_LOCAL_SERVER, а так получится не INPROC.
...
Рейтинг: 0 / 0
dll c фомой как ее открыть в VB
    #34229372
Юрик#
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
БенедиктЮрик#,
Во-первых, dll должна-таки бы регистрироваться через regsvr32 или вызовом DllRegisterServer() (что, впрочем, regsvr32 и делает). Я не понял фразу "dll regsrv32 не регистрируется". Не указано, что надо регистрировать, в документации? regsrv32 - это опечатка? Возникает ошибка при исполнении regsvr32? Какая?
Во-вторых, вроде бы не все COM-объекты могут быть созданы через New. Попробуй через CreateObject("CKUtils.RTDBDialogs").
В-третьих, можно и через CoCreateInstance() попытаться, но попробуй второе.

regsrv32 это опечатка

Запускаю

regsvr32.exe CKUtils.dll появляется ошибка

Ошибка при вызове LoadLibrary("CKUtils.dll") - Не найден указанный модуль
...
Рейтинг: 0 / 0
dll c фомой как ее открыть в VB
    #34229383
Юрик#
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 я ничего подобного на нашел...
...
Рейтинг: 0 / 0
dll c фомой как ее открыть в VB
    #34229804
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЮрикЗапускаю

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, библиотеку типов ты уже подключил.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / dll c фомой как ее открыть в VB
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]