-
Всем привет!!! Я жил, не тужил, народу помогал , короче был хорошим и послушным, но тут случилось бяка… А бяка заключалась в том, что мне дали Dll-ку с которой мне нуна активно поработать
Я не долго думая сделал «Import Component», в результате получил файл *_TLB.pas, который подключил к своему проекту. … const LIBID_deObjDBLib: TGUID = '{741B2D1D-A526-459B-8039-A9D5B4C42391}';
IID_IObjDB: TGUID = '{9B1611B2-F442-47B3-BE6E-463C82F28F6F}'; CLASS_ObjDB: TGUID = '{98F6535A-79B2-409B-9068-07BB7E2EC61D}'; ....
IObjDB = interface(IUnknown) ['{9B1611B2-F442-47B3-BE6E-463C82F28F6F}'] …. CoObjDB = class class function Create: IObjDB; class function CreateRemote(const MachineName: string): IObjDB; end; …
Бросил на форму кнопарь и прописал следующий код: procedure TForm1.Button1Click(Sender: TObject); var v : IObjDB; a : CoObjDB; begin v := a.Create; end;
Думал, что вот оно – счастье, а нет, оказалась «Ж»…
при выполнении этого кода вылетает ошибка… что тока не делал... даже мышку почистил, но не помогло... Какой необходимо исполнить танец с бубном, чтобы заработало?
-
regsvr32 DllName.dll
-
Не помогает.
VBA и C# нормально работают с этой Dll-кой, а вот Delphi не хочет :(
-
> Думал, что вот оно – счастье, а нет, оказалась «Ж»…
какая именно «Ж»? Дословно, если можно
-
Ж - попа, тока на букву Ж
-
>systopler
C Ж всем понятно, а вот какой текст ошибки ?
-
procedure TForm1.Button1Click(Sender: TObject); var v : IObjDB; a : CoObjDB; begin a := CoObjDB.Create; v:= a as IObjDB; end;
-
Ошибка: OLE error C000001D, ClassID:{98F6535A-79B2-409B-9068-07BB7E2EC61D}
-
> procedure TForm1.Button1Click(Sender: TObject);
> var
> v :;
> a : CoObjDB;
> begin
> a := CoObjDB.Create;
> v:= a as IObjDB;
> end;
так нельзя т.к. "a : CoObjDB" , а CoObjDB.Create возвращает IObjDB
-
> procedure TForm1.Button1Click(Sender: TObject);
> var
> v :;
> a : CoObjDB;
> begin
> a := CoObjDB.Create;
> v:= a as IObjDB;
> end;
так нельзя т.к. "a : CoObjDB" , а CoObjDB.Create возвращает IObjDB
-
>systopler
LoadLibrary пробовали ?
-
procedure TForm1.Button1Click(Sender: TObject);
var
СreateObject : procedure (IID:TGUID; out Obj);
_Mod : Integer;
mainObjDB : ObjDB;
begin
_Mod := LoadLibrary(PChar('C:\Dgpp\bin\deObjDB.dll'));
try
СreateObject := GetProcAddress (_Mod, 'CreateObject');
СreateObject (IObjDB, mainObjDB);
finally
FreeLibrary (_Mod);
end;
end;
в коде СreateObject (IObjDB, mainObjDB); выдает сообщение об ошибке Access violation at address 00000000. Read of address 00000000
-
procedure TForm1.Button1Click(Sender: TObject);
var
СreateObject : procedure (IID:TGUID; out Obj);
_Mod : Integer;
mainObjDB : IObjDB;
begin
_Mod := LoadLibrary(PChar('C:\Dgpp\bin\deObjDB.dll'));
try
СreateObject := GetProcAddress (_Mod, 'CreateObject');
if @СreateObject = nil then begin
MessageBox (0, 'СreateObject = nil', '', MB_OK);
exit;
end;
СreateObject (IObjDB, mainObjDB);
finally
FreeLibrary (_Mod);
end;
end;
Выходит сообшение, что СreateObject = nil
-
>systopler (17.08.07 13:39) [12]
А _Mod ?
Перейти в каталог deObjDB.dll ? (SetCurrentDirectory)
-
procedure TForm1.Button1Click(Sender: TObject);
var
СreateObject : procedure (IID:TGUID; out Obj);
_Mod : Integer;
mainObjDB : IObjDB;
begin
SetCurrentDirectory ('C:\');
_Mod := LoadLibrary ('C:\deObjDB.dll');
if _Mod = 0 then begin
MessageBox (0, 'Библиотека не загрузилась :(', '', MB_OK);
exit;
end;
try
СreateObject := GetProcAddress (_Mod, 'CreateObject');
if not Assigned(@СreateObject) then MessageBox (0, 'СreateObject = nil', '', MB_OK)
else СreateObject (IObjDB, mainObjDB);
finally
FreeLibrary (_Mod);
end;
end; Действительно _Mod=0чтобы я не делал *.dll-ка не хочет открываться :(
-
Проверить ее depends.exe (если есть).
Попробовать CoLoadLibrary ?
-
можно подробней об этой функции, и совсем круто будет если будет примерчик
-
deObjDB.dll – использует OLE для работы с XML. Есть вероятность, что вся проблема в этом?
-
-
в результате этого кода _Mod := LoadLibrary ('C:\deObjDB.dll');
str := IntToStr(GetLastError);
str = '3221225501'
|