Ik heb een DLL geschreven in C++ die ik in C# wil gaan gebruiken. De DLL is om communicatie met een PLC tot stand te brengen
Deel van header file (ik heb .h .lib en de dll, dll ga ik gebruiken, maar adhcv de header weet ik wat er is)
in de 2de functie wordt er om een char* gevraagd die een mininmale grote heeft. De retourwaarde is een errorcode die met de eerste functie opgehaald kan worden.
De eerste functie geef je de errorcode, buffergrote en bufferpointer mee.
Die tweede functie heb ik alsvolgt gedefinieerd:
Als ik de functie aanroep:
Werkt het niet, ik krijg code 286 terug en die staat voor: 'No connection to database or S7DOS handle invalid.'. De tweede functie(geterrormessage) geeft 28736 terug, die staat voor 'Result buffer too small'
Op zich ook wel logisch aangezien die string niet zo groot is. De char* wordt door de functie gevuld.
Hoe kan ik een buffer meesturen die wel groot genoeg is, dus dat die ruimte wel vastgelegd is?
Bij de eerste functie waar de buffer grote en bufferpointer meegegeven moet worden heb ik geen flauw idee hoe ik dit moet oplossen.
Ik heb LPArray geprobeerd met een vaste grote van 100 en buffergrote 100 meegegevn en dit werkt niet.
Hoe moet ik deze functie aanpakken
Deel van header file (ik heb .h .lib en de dll, dll ga ik gebruiken, maar adhcv de header weet ik wat er is)
C++:
1
2
| int PRODAVEAPI GetErrorMessage_ex6 (int ErrorNr, ULONG BufLen, char * pBuffer); int PRODAVEAPI as_zustand_ex6 (unsigned char * pState); |
in de 2de functie wordt er om een char* gevraagd die een mininmale grote heeft. De retourwaarde is een errorcode die met de eerste functie opgehaald kan worden.
De eerste functie geef je de errorcode, buffergrote en bufferpointer mee.
Die tweede functie heb ik alsvolgt gedefinieerd:
C#:
1
2
| [DllImport("prodave6.dll", EntryPoint = "as_zustand_ex6", ExactSpelling = false)] public static extern int as_zustand_ex6([MarshalAs(UnmanagedType.LPStr)] ref string test); |
Als ik de functie aanroep:
C#:
1
2
| string teststring=""; int i=ProdaveWrapper.as_zustand_ex6(ref teststring); |
Werkt het niet, ik krijg code 286 terug en die staat voor: 'No connection to database or S7DOS handle invalid.'. De tweede functie(geterrormessage) geeft 28736 terug, die staat voor 'Result buffer too small'
Op zich ook wel logisch aangezien die string niet zo groot is. De char* wordt door de functie gevuld.
Hoe kan ik een buffer meesturen die wel groot genoeg is, dus dat die ruimte wel vastgelegd is?
Bij de eerste functie waar de buffer grote en bufferpointer meegegeven moet worden heb ik geen flauw idee hoe ik dit moet oplossen.
Ik heb LPArray geprobeerd met een vaste grote van 100 en buffergrote 100 meegegevn en dit werkt niet.
Hoe moet ik deze functie aanpakken
[ Voor 4% gewijzigd door elgringo op 01-06-2007 09:57 ]
if broken it is, fix it you should