013
06.09.2003, 13:11 Uhr
~VooDoo
Gast
|
Hallo,
danke erstmal für die Antworten, also ich habs jetzt erstmal so versucht:
C++: |
long __stdcall BFEncrypt(char* Key, long lLaengeTmp, char* Tmp, LPWSTR Destination) { LPCSTR szText; char* p = encrypt_string(Key,Tmp);
szText = (LPCSTR)p; int nLen = strlen(szText) + 1; Destination = new WCHAR [nLen]; mbstowcs(Destination, szText, nLen);
return 15;
//delete p;
}
|
naja, da meint VC++: blowfish.obj : error LNK2001: Nichtaufgeloestes externes Symbol _mbstowcs blowfish.obj : error LNK2001: Nichtaufgeloestes externes Symbol _strlen Release/blowfish.dll : fatal error LNK1120: 2 unaufgeloeste externe Verweise
Hm - was fängt man jetzt damit an? *g* (Sorry für die Newbe-Fragen)
@Pablo: Keine Ahnung warum ich kein char * nehme - in irgend einem Beispiel wurde das mit LPWSTR's gemacht *g*
Ich stell mir das so vor:
in VB deklarier ich meine DLL:
Visual Basic: |
Private Declare Function BFEncrypt Lib "blowfish.dll" _ (ByVal Tmp As String, _ ByVal Key As String, ByRef Destination As Long) As Long
|
und ruf die dann irgendwo auf:
Visual Basic: |
Result = BFEncrypt(Tmp, sKey, 0)
Ergebnis = String$(Result, 0) BFEncrypt Tmp, sKey, StrPtr(Ergebnis)
|
Also wird als erstes von der DLL die Länge des neuen Strings zurückgegeben und dann ein neuer String mit dieser Länge angelegt. Dann wird die Funktion nochmal aufgerufen und Destination wird ein Pointer zu diesem String übergeben.
nun C++ macht dann die normale Routine zur berechnung des neuen Strings:
C++: |
long __stdcall BFEncrypt(char* Tmp, char* Tmp, char* Destination) { char* p = encrypt_string(Key,Tmp); if(Destination) { // hier irgendwie p in Destination kopieren - also die Variable im Speicher auf die dann VB zugreift } int Laenge = strlen(p); return Laenge;
delete p;
}
|
Aber irgendwie peil ich das nich...
Danke für euer bemühen.
VooDoo |