meine DLL liefert nur erste Buchstabe vom String

Reticent

Erfahrenes Mitglied
Hallo Leute,


ich habe mir eine DLL gebastelt. Dort habe ich eine Funktion, die so definiert ist:
Code:
__declspec( dllexport ) CString __stdcall GetSerialNumber(char* ch_port, char* ch_ID_Nr)
{...}
also mache ich am Ende ein return s_result;

Dann in meiner Testapplikation gibt es so was
Code:
typedef CString (*DLLFUNCTION1PROC)(char*, char*);

...

	HMODULE hMyDLL = LoadLibrary("gibstring.dll");
	DLLFUNCTION1PROC call_GetSerialNumber = NULL;
	if (hFARGOMifare != NULL)
	{
		call_GetSerialNumber = (DLLFUNCTION1PROC)GetProcAddress(hMyDLL , "GetSerialNumber");
		AfxMessageBox(call_GetSerialNumber("COM1", "123456"));
	}

Das Problem ist, dass die DLL mir nur den aller ersten Buchstaben liefert, und nicht den kompletten String. Habe auch schon mal mit char* versucht, leider mit gleichem Ergebnis.
Was könnte es sein? Was mache ich hier falsch?

p.s.(ich sage vorerst nicht, dass ich mithilfe der DLL später in VB den String haben möchte. Das ist noch der Hundekot....)
 
habe erldigt :)
Einfach den CString nach char* umgeschaufelt.
Code:
char* CStringTOcharp(CString s_source)
{
	int i_size = s_source.GetLength();
	char* ch_loginData = new char[i_size];
	int i;
	for (i=0;i < i_size; i++)
	{
		ch_loginData[i] = s_source.GetAt(i);
	}
	ch_loginData[i] = NIL;
	return ch_loginData;
}
nur weiß jemand wie ich den "carriage return" wegradiert?
 
Den CR wirst Du nur wegbekommen, wenn Du in Deiner for-Schleife auf '\r' vergleichst und das eben nicht mit anfügst.
Allgemein würde ich Dir raten, in DLL's bei den Übergabe- und Rückgabeparametern nur Zeiger und Standardtypen zu verwenden und keine (MFC-)Klassen. Damit gibt es immer wieder Probleme.
 
Danke,

habe von CString auf char* umgestiegen.

Wegen '\r' klappt bei mir irgendwie nicht. Na ja, habe den String in VB einfach um ein Zeichen verkürzt.

Danke nochmals.
 
Zurück