Jeg har en dll med en klasse, som jeg gerne vil have adgang til fra Delphi. Jeg har registreret dll'en fra DOS-prompten og har fået kontakt fra VBA ved at referere til tlb-filen. Har fået lavet et objekt af testklassen med følgende syntax:
Arne kom mig i forkøbet. Hvis det er et com objekt, og det antager jeg udfra spørgsmålet, så er det ligemeget hvad det er skrevet i. Det burde være nok at importere type library.
Tak for Jeres svar. Det er et COM-objekt, men som bekendt får jeg den der compile-fejl i mscorlib_TLB når jeg prøver at importere type library.
DLL og COM er relativt nye begreber for mig, så jeg må indrømme at jeg ikke helt forstår hvad en tlb-fil er og hvorfra msccorlib_TLB kommer. Men det kan jeg nok også leve uden helt at forstå. Problemet er vel i virkeligheden om jeg kan komme uden om den der compile-fejl på mscorlib_TLB?
linje 1 skulle vist generere min TestModel.tlb, som jeg efterfølgende prøver at importere fra delphi(import type library) og i linje 2 registrerer dll'en på maskinen.
Det har jeg gjort, men så får jeg fejlen, som beskrevet 03/05-2006 12:58:58. ___________ I mscorlib_TLB linje 4515 siger den: Type 'Byte' is not yet completely defined
4514 Byte = packed record 4515 m_value: Byte; 4516 end;
Og der er en masse andre compilefejl med samme besked på typerne: double, single, int64. Foruden fejl, der siger illegal type in OLE automation section ____________ Og så er det, at jeg ikke kan komme videre og tænker, om jeg har gjort noget forkert eller om min Delphi 5 ikke kan bruge et COM-objekt. Men det har arne_v bekræftet skulle kunne lade sig gøre. Nogen idéer?
Kan du give mig en forklaring på hvilket type-library, som jeg istedet skal importere?
Alt hvad jeg havde da jeg startede var en dll-fil og fra kommando-prompten skrev jeg følgende og fik skabt min testmodel.tlb fil, som jeg efterfølgende har prøvet at importere.
Jeg har søgt lidt på nettet og fundet ud af, at flere har haft det samme problem som mig med de der compile-fejl, men der er ikke umiddelbart nogen nemme løsninger.
Jeg vil forsøge mig med en ny Delphi version i weekenden og se om det løser problemet.
I Delphi vælger jeg: New... -> Application Så klikker jeg på: Project -> Import type library... Så markerer jeg min tlb-fil Så klikker jeg Create Unit Så prøver jeg at kompilere og får følgende fejl:
[Error] mscorlib_TLB.pas(4505): Type 'Byte' is not yet completely defined [Error] mscorlib_TLB.pas(4520): Type 'Double' is not yet completely defined [Error] mscorlib_TLB.pas(4546): Type 'Int64' is not yet completely defined [Error] mscorlib_TLB.pas(4574): Type 'Single' is not yet completely defined [Error] mscorlib_TLB.pas(4989): Illegal type in OLE automation section: 'Byte' [Error] mscorlib_TLB.pas(4996): Illegal type in OLE automation section: 'Single' [Error] mscorlib_TLB.pas(4997): Illegal type in OLE automation section: 'Double' [Error] mscorlib_TLB.pas(10054): Illegal type in OLE automation section: 'Byte' [Error] mscorlib_TLB.pas(10061): Illegal type in OLE automation section: 'Single' [Error] mscorlib_TLB.pas(10062): Illegal type in OLE automation section: 'Double' [Fatal Error] TestModel_TLB.pas(30): Could not compile used unit 'mscorlib_TLB.pas'
Nej, ikke helt. Kyl din tlb-fil ad h til. Delphi 7 (jeg har ikke Delphi 5 installeret mere): New, Application Project, Import type library Vælg korrekt type library i listen. Du skal så vælge om du vil have dannet og installeret det som en komponent, eller blot have dannet en unit+tlb. Jeg plejer som regel det sidste: Fjern hak fra Generate Component Wrapper. Vælg et bibliotek hvor du vil have type library placeret i Unit dir name. Klik Create Unit. Nu har du et type library du kan bruge.
Tak for dit svar. Kan du specificere hvad korrekt type library er? Er det en tlb, olb, ocx, dll eller exe fil. Hvis jeg smider min tlb-fil ad H til, så har jeg kun dll'en tilbage. Hvis jeg prøver at importere den, så siger programmet:
Could not load type library. Fejl under indlæsning af type-DLL.
Så er jeg kommet ud over mine kompileringsfejl ved at benytte Delphi 2006. Men så opstår mit næste problem - en run-time error: Exception class EAccessViolation with message 'Access violation at address 00458181 in module 'Project1.exe'.
Jeg har følgende i mit program
Uses TestModel_TLB ... var MyObject:TestClass; test:double; begin MyObject.TestDouble:=2; //disse tre linjer kaster ovennævnte exception MyObject.CalcTestdouble; // test:=MyObject.TestDouble;//
Nogen idéer til at løse det? Jeg kan lige tilføje, at de samme tre linjer virker fra VBA.
I Delphi får jeg vel aldrig kørt constructoren. Det er måske der hvor problemet opstår. Hvordan kalder jeg constructoren? - der er nemlig ikke nogen create-metode.
/Michael
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.