Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Wie muß ich meine Dll in c++ schreiben

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
18.07.2003, 16:34 Uhr
~Gast
Gast


Hi!

Neuer Anlauf:

Wie muß ich meine Dll in c++ schreiben, wenn ich ein Array von einem externen Programm erhalte?

Mit folgendem Code?


Code:
extern "C" __declspec(dllexport) long __stdcall teste(char ar[][100],  long nCount)



Danke!


P.S.: Siehe auch :
www.fun-soft.de/forum/showtopic.php?PHPSESSID=&threadid=3306&time=1058475153

P.S.: @FloSoft:
Ist meine Frage jetzt "VC++ spezifisch" genug gestellt???

Dieser Post wurde am 18.07.2003 um 18:37 Uhr von Uwe editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
19.07.2003, 10:43 Uhr
Pablo
Supertux
(Operator)


Hi

vielleicht hilft das:
http://users.ntplx.net/~jpjones/tech/dll1.htm
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/modcore/html/deovrapibasics.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/modcore/html/deovrTheWindowsAPIOtherDynamicLinkLibraries.asp

Ich bin sicher, dass VC++ ein Wizard für solche Funktionen haben muss, muss man nur suchen.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
19.07.2003, 13:11 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,
hab jetzt Pablo unter seinen Links nicht nachgeschaut, aber ich würde SAFEARRAY einsetzen.
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
19.07.2003, 14:13 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,
kleine Zugabe:

C++:
#include <windows.h>


BOOL __stdcall DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved){
    return TRUE;
}
extern "C" __declspec(dllexport) long __stdcall WINAPI StringArray(LPSAFEARRAY *ppsa)
{
    long i;
    BSTR bstr;
    LPSAFEARRAY psa;
    SAFEARRAYBOUND sa;

    sa.lLbound = 0;
    sa.cElements = 10;

    if (*ppsa == NULL){
        if ((psa = SafeArrayCreate(VT_BSTR, 1, &sa)) == NULL)
            return ERROR;
        *ppsa = psa;
    }
    else{
        if ((*ppsa)->cDims != 1)
            return ERROR;
    }

    for (i = sa.lLbound+1; i < sa.cElements; i++){
        if (FAILED(SafeArrayGetElement(*ppsa, &i, &bstr)))
            return ERROR;
        if (FAILED(SafeArrayPutElement(*ppsa, &i, bstr)))
            return ERROR;
        MessageBox(NULL,(char*)bstr,"",MB_OK);
    }

    return 0;
}


VB

C++:
Option Explicit
Private Declare Function StringArray Lib "test.dll" Alias "_StringArray@4" _
    (s() As String) As Integer
Private Sub Command1_Click()
    ReDim str(10) As String
    Dim i As Integer
    str(1) = "String 1"
    str(2) = "String2"
    REM .........
    i = StringArray(str)
End Sub


--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe

Dieser Post wurde am 19.07.2003 um 14:33 Uhr von Uwe editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
21.07.2003, 15:19 Uhr
~Gast
Gast


Hallo Uwe!

Vielen vielen Dank für Deine Hilfe!

Es klappte anstandslos!

Dennoch einige Verständnisfragen:

Ich muß dieses "Array" an eine Funktion einer anderen Klasse übergeben.

1) Wie muß dann die Parameterliste der Funktion aufgebaut sein und
2) wie ist der Aufruf der Funktion zu bewerkstelligen?

Danke!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
21.07.2003, 17:20 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,
zunächst muß ich festhalten, das reiner API-Code, also müsste ich wieder verschieben...
Spaß beiseide, wo sind die Funktionen, in der Dll? Was brauchst Du? Die einzelnen Strings?
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
21.07.2003, 17:38 Uhr
~Gast
Gast


Hallo Uwe!

>wo sind die Funktionen

Die Funktionen befinden sich in meiner c++-DLL, jedoch in einer anderen Klasse.

>Was brauchst Du? Die einzelnen Strings?

Diese Funktion soll das gesamte Array übergeben bekommen, um dann die einzelnen Strings an bestimmte andere Funktionen innerhalb der Klasse weiterzuleiten.

Gruß
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
21.07.2003, 17:56 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,
das ist aber dann etwas umständlich(oder ich hab's falsch verstanden). Ich hatte den Rückgabetyp der Funktion als long genommen, weil er in Deiner Version so auftauchte. Wenn Du den nicht brauchen solltest kannst Du darin das Array aufnehmen und einen entsprechenden return zurück geben. Oder Du weist das Array einer Variable zu, welche von der Klasse genutzt wird. Oder Du legst eine Struktur an, oder definierst in Deiner Klasse eine entprechende Variable oder...
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
21.07.2003, 18:14 Uhr
~Gast
Gast


Hallo Uwe!

Danke für Deine Antwort.

Also long hatte ich in dieser Konstellation schon immer drin, da ich auch andere Dinge mit übergeben mußte, bspw. einen "cancel-Handler". Wenn die exe während des Vorgangs bspw. abbricht, braucht meine DLL auch diese Daten.

Kannst Du mir erklären, warum es "umständlich" wird durch dieses long? Das habe ich nicht so ganz verstanden!

>...Oder Du weist das Array einer Variable zu, welche von der Klasse genutzt wird....
Geht das nicht mit long?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
21.07.2003, 18:26 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,
da hast du jetzt etwas falsch verstanden. Es ist umständlich das Array erst "durchzureichen". Machs z.B. so (wenn es für Dir genehm ist)

C++:
class DeineKlasse{
public:
   LPSAFEARRAY* pClassArray;
//.......
};



C++:
extern "C" __declspec(dllexport) long __stdcall WINAPI StringArray(LPSAFEARRAY *ppsa)
{
    // mach hier etwas
    DeineKlasse dk;
    dk.pClassArray=ppsa;
    return 0;
}


Hoffe hab mich nicht vertipp.
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: