Avatar billede reds2001 Nybegynder
05. april 2002 - 10:49 Der er 14 kommentarer og
1 løsning

C++ Dll kald fra VB

Jeg har en VB applikation der skal kalde en funktion i VC++. Argumenter og returværdier skal være CString Hvordan skal det gøres??
Avatar billede casperwollesen Nybegynder
05. april 2002 - 12:24 #1
Vil mene du gør på denne måde, aller øverste skriver du følgende:

Private Declare Function <FunktionNavn> Lib "<DllNavn" (ByVal arg As String) As String

Nu kan du kalde den på funktion navnet som en almindelig funktion i VB.

Jeg har kun selv prøvet hvor den ikke returnere noget, men går ud fra det giver det samme.

Mvh.
Casper W.
Avatar billede casperwollesen Nybegynder
05. april 2002 - 12:26 #2
ups, der skal ikke < > om navnene, bare for at gøre det mere klart.
Avatar billede reds2001 Nybegynder
05. april 2002 - 12:35 #3
nej, det duer ikke, for der er noget bøvl med forskellen af strenge mellem c++ og vb
Avatar billede jpk Nybegynder
05. april 2002 - 15:47 #4
Skal du kalde en funktion i VC++ (programmet) eller i et lib du har lavet i VC++?
I så fald, anvender du COM eller..?
Avatar billede reds2001 Nybegynder
06. april 2002 - 00:07 #5
Jeg har lavet et dll i c++ og skal foretage funktion kaldet fra VB applikationen
Avatar billede jpk Nybegynder
06. april 2002 - 14:47 #6
Igen, bruger du COM eller..?
Avatar billede reds2001 Nybegynder
08. april 2002 - 13:29 #7
eller hvad??
jeg har brugt atl wizarden hvis det er det du tænker på.
Avatar billede jpk Nybegynder
08. april 2002 - 14:34 #8
Okay, når du har kompileret og registreret din dll, går du over i VB og vælger Project->References, krydser din dll af, trykker "OK" og så er du klar til at bruge den.
Avatar billede jpk Nybegynder
08. april 2002 - 14:36 #9
Du kan også højreklikke på din kode og vælge "Object Browser", så kan du se hvilke metoder der findes på interfacet.
Avatar billede reds2001 Nybegynder
08. april 2002 - 18:38 #10
JPK<<Jeg tror at du misforstår mig. Problematikken er overførsel af strenge fra vb applikationen til c++ dll'et og omvendt. CString i C++ og strings i VB kan ikke enes:-)
Avatar billede casperwollesen Nybegynder
09. april 2002 - 07:51 #11
Jeg kan godt overfører strenge fra VB til dll'en, der er skrev i C++. Har du stadigvæk problem med det? For det skal du bare overføre med by value.

Men jeg har også prøvet diverse metoder på at få den til at kunne returnere en streng, og det er ikke løkkes endnu.

Casper W.
Avatar billede jpk Nybegynder
09. april 2002 - 08:17 #12
Når du tilføjer en metode med en streng, bliver funktionens signatur så a la:

STDMETHODIMP CClassName::Func(BSTR Val)
Avatar billede reds2001 Nybegynder
10. april 2002 - 10:55 #13
extern "C" long FAR PASCAL EXPORT StringFunc (char *str)
{
    char *ch;
    CString temp,temp2;
    temp=*str;
    strcpy(ch,temp);

    theApp.SetString(temp);

    temp2=theApp.GetString();

    strcpy(str,temp2);
    return 0;
    }
Sådan ser funktionen ud.
I min VB applikation køre jeg en rutine der tilpasser den 'str' således at den bliver "klippet" ved den første '0' karakter. Problemet er bare at der altid er en '0' på strengens anden plads.
Avatar billede reds2001 Nybegynder
10. april 2002 - 22:55 #14
jeg opretter spørgsmålet igen med størrer belønning til det rigtige svar
Avatar billede jpk Nybegynder
11. april 2002 - 08:34 #15
Jeg vil meget gerne hjælpe dig, men der findes mange måder at gøre det samme på og mange teknologier!
Af gode grunde ved jeg ikke hvilke du bruger og kommer derfor med nogle spørgsmål. Hvis du ikke svarer på disse, kan jeg ikke hjælpe dig..!
Du skal tænke mere objektivt og ikke tage for givet at alle bruger de samme teknologier som dig.
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