Avatar billede trer Nybegynder
01. maj 2006 - 21:44 Der er 9 kommentarer og
1 løsning

Kald af funktion i DLL ?

Hej

Jeg har en DLL hvortil header-definitionen (i C/C++) lidt forkortet lyder som følger:

#define H_X_EXPORT _declspec(dllexport)

class myclass
{
public:
H_X_EXPORT myclass();
H_X_EXPORT ~myclass();
H_X_EXPORT long myfunc(const char* str_in,char ** str_out);
}


Jeg vil gerne importere dette objekt/klasse så jeg kan anvende den i VB6. 

Jeg har kun tidligere prøvet at importere simple API funktioner fra DLL'er, så hvordan griber jeg det an?
Avatar billede sjh Nybegynder
02. maj 2006 - 04:32 #1
Hvis du ellers har registreret den så skulle det bare være noget i den stil..
er dog ikke sikker på >myclass.~myclass<

ellers tag den fra menu -> Project -> References...


Private Sub Form_Load()
Dim obj As Object
Dim nRet As Long
Dim strIn As String
Dim strOut As String

  Set objClass = CreateObject("myclass.~myclass") ' <- Class i VB6 = CreateObject("Project1.Class1")

  nRet = objClass.myfunc(strIn, strOut)

  Set objClass = Nothing
End Sub
Avatar billede sjh Nybegynder
02. maj 2006 - 04:34 #2
Private Sub Form_Load()
Dim obj As New myclass ' <- menu -> Project -> References...
Dim nRet As Long
Dim strIn As String
Dim strOut As String
  nRet = objClass.myfunc(strIn, strOut)
End Sub
Avatar billede trer Nybegynder
02. maj 2006 - 14:45 #3
Hej

Det er netop en klasse i C/C++ - ikke et COM objekt eller Active X - så det kan ikke registeres! 

Netop derfor skal jeg lave selve import-delen så jeg kan wrappe klassen til et COM objekt.
Avatar billede sjh Nybegynder
02. maj 2006 - 18:44 #4
Du skriver:
"Jeg vil gerne importere dette objekt/klasse så jeg kan anvende den i VB6"

objekt/klasse er vel det samme som COM objekt??

' Hvis det er en Win32 DLL så skal det se sådan ud:
Private Declare Function myfunc Lib "myclass.dll" (str_in As String, str_out As String) As Long
Avatar billede trer Nybegynder
02. maj 2006 - 18:58 #5
C/C++ klasser er desværre ikke det samme som COM / ActiveX objekter - ligesom Delphi klasser heller ikke er.

Og den normale import funktion - som du angiver og jeg i øvrigt også plejer at bruge - fungerer netop kun på almindelige funktioner/procedurer i Win32 regis og ikke på klasser :-(
Avatar billede trer Nybegynder
02. maj 2006 - 19:04 #6
Jeg prøver at flytte spørgsmålet til C/C++ forumet i stedet.
Avatar billede sjh Nybegynder
02. maj 2006 - 19:29 #7
ellers prøv den her:
http://www.activevb.de/rubriken/komponenten/dll24/dll24.html

den viser hvordan du kan lave en c++ dll til vb..
Avatar billede arne_v Ekspert
02. maj 2006 - 19:42 #8
En Win32 DLL og en COM komponent er ikke det samme.

Man kan godt hente klasser fra en Win32 DLL, men da C++ og VB bruger forskellige
konventioner, saa kan C++ klasser i en Win32 DLL naeppe tilgaes fra VB (det er
et af de omraader hvor .NET er meget bedre !).

COM goer det muligt at kalde mellem flere sprog (C++, VB etc.) via en
rimelig kompleks mekanisme (det er komplekst at implementere COM
komponent, det er halv komlekst at kalde fra et C++ program, det er
supernemt at kalde fra VB).

C++ koden skal omskrives for at kunne aendres fra Win32 DLL til
COM komponent.

Hvis du ikke kan omskrive C++ koden skal du lave en COM wrapper til
din Win32 DLL.

Ikke umuligt. Ikke engang svaert hvis man er skrap til udvikling af
COM komponenter i C++. Men dem er der langt imellem.
Avatar billede trer Nybegynder
02. maj 2006 - 23:24 #9
hej Arne

Det er en "udenbys" DLL som jeg ikke kan ændre ved, desværre - så en wrapper er min eneste mulighed. At skrive en COM wrapperen i VB6 er så ikke muligt ud fra hvad du fortæller.

.NET er ikke en mulighed - jeg skal nemlig kunne bruge COM objektet fra script efterfølgende.

Desværre er mine C/C++ kundskaber meget rudimentære, men jeg vil kigge på import af klassen i delphi i stedet - der er jeg også mere velbevandret end i VB - og giver det for mange problemer laver jeg blot et lille kommandolinje-program i C som jeg kan kommunikere med via stdin/stdout.
Avatar billede trer Nybegynder
03. maj 2006 - 00:36 #10
ah..  løsningen var at anvende Delphi til at skrive en COM objekt wrapper fremfor VB. 

Jeg lukker spørgsmålet her fra. Tak for hjælpen.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester