Just nu i M3-nätverket
Gå till innehåll

registrering av dll


AERO1

Rekommendera Poster

Jag har gjort en dll i C++ som heter test.dll. Sen ska jag registrera den så att jag kan använda den i mitt VB-program. Men det går inte att köra regsvr32 på den. Varför?

Länk till kommentar
Dela på andra webbplatser

Du behöver för det första inte registrera dll:en för att använda den i VB.

 

Om det däremot är en COM-server så förväntas den ha två callbacks *(DllRegisterServer och DllUnregisterServer) som regsvr32 ropar på för att be din kod att lägga upp det som behövs läggas upp i registryt (eller avinstallera sig).

Desstuom behöver du ha med OleSelfRegister i versionsinfon.

 

Kör du med ATL eller nåt så finns det oftast med support för det automagiskt, gör du dina com-klasser för hand så får du hantera det för hand.

 

Men som sagt, om det inte är com-klasser du gjort så behöver du förmodligen inte köra regsvr32 på dem.

 

 

Länk till kommentar
Dela på andra webbplatser

Tack, fhe, jag upptäckte det också. :-)

 

Men, när jag sen deklarerade den i VB, typ

Public Declare Function Save Lib "CONFIG" (ByVal ObjectName As String) As Integer

så säger den att den inte hittar 'entry point' till functionen. Vad gjorde jag för fel? Är det nånting speciellt man måste göra med själva dll:n?

 

 

Länk till kommentar
Dela på andra webbplatser

Min gissning är tudelad

För det första så är det en viss risk att du är drabbad av C++-kompilatorns namnmangling.

 

Sätt prototypen till functionen inom

extern "C" {
deklaration;
}

 

För det andra måste du nog exportera funktionen, antingen gör du det med en def-fil i projektet eller med kompilator-direktiv som gör detsamma (de är nästan alltid kompilatorspecifika).

 

 

Länk till kommentar
Dela på andra webbplatser

Vet inte hur din situation ser ut, men när jag använder Vis C++ i flerspråksmiljöer använder jag nästan alltid COM eller hellre .NET.

Bara en enskild åsikt, men VB är mycket COM-orienterat, och använder man det är det oftast enklare att få ordning på saker.

My $0.02

 

Länk till kommentar
Dela på andra webbplatser

Det är märkligt! Jag tog bort all 'skit' som jag inte förstår och nu hittar han 'entry point'! Men, problem kvarstår. Jag skriver;

int __stdcall GetChar(char *TheValue)

{ TheValue = "h";

 

 

return 0;

 

}

 

Meningen är att den ska returnera ett värde i TheValue, som jag anropar i VB ByRef. Men det funkar inte. Jag blir galen! Funktionen funkar jättebra i ett annat C++ program.

Hjälp!

 

 

'I wonder if God really had a choice in the creation of the world.'----Einstein

 

Länk till kommentar
Dela på andra webbplatser

Om man bortser från att strängar och C inte riktigt funkar på det där sättet, vad är det som inte funkar?

 

Det som händer i koden är att du pekar om pekaren TheValue till där konstanten "h" är lagrad av kompilatorn. Det kommer inte på något sätt att speglas tillbaka till anroparen.

 

Är det verkligen pekaren du vill ändra (och skicka tillbaka) så är det förmodligen en char** du vill ha som argument, om du vill ändra det som pekaren pekar på så rekomenderas strcpy() med släktingar.

 

[inlägget ändrat 2002-09-26 15:59:58 av fhe]

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...