Mijn situatie is als volgt. Ik heb in C++ een simpele DLL geschreven en deze redelijk uitvoerig getest middels een testprogramma in C++. Verschillende inputs, verschillende gewenste outputs, etc. Alles lijkt te werken. "Mooi!", dacht ik.
Het uiteindelijke doel is echter deze DLL vanuit C# aan te roepen. Hiertoe heb ik analoog aan het testprogramma in C++ een programma geschreven waarin de DLL vanuit C# wordt aangeroepen. Dit werkt op het eerste gezicht; Het aanroepen van de functie werkt en geeft de juiste resultaten bij gegeven input terug.
Een probleem doet zich echter voor zodra ik de functie daarna nogmaals aanroep vanuit C#. Iedere keer dat ik daarna de betreffende functie aanroep komen er dezelfde verkeerde resultaten uit, terwijl ik alle waarden voor het aanroepen van de functie initialiseer. (Let wel; dit probleem bestaat niet in testprogramma wat ik in C++ schreef).
Ik vermoed dat er dus iets mis is met mijn C# code, maar ik heb geen idee meer wat. Mogelijk zit het hem in het
Mijn C# code ziet er zo uit (ik heb omwille van de duidelijkheid niet-relevante zaken weggelaten):
De code voor de DLL is als volgt;
Heeft iemand een idee waar het mis gaat?
Het uiteindelijke doel is echter deze DLL vanuit C# aan te roepen. Hiertoe heb ik analoog aan het testprogramma in C++ een programma geschreven waarin de DLL vanuit C# wordt aangeroepen. Dit werkt op het eerste gezicht; Het aanroepen van de functie werkt en geeft de juiste resultaten bij gegeven input terug.
Een probleem doet zich echter voor zodra ik de functie daarna nogmaals aanroep vanuit C#. Iedere keer dat ik daarna de betreffende functie aanroep komen er dezelfde verkeerde resultaten uit, terwijl ik alle waarden voor het aanroepen van de functie initialiseer. (Let wel; dit probleem bestaat niet in testprogramma wat ik in C++ schreef).
Ik vermoed dat er dus iets mis is met mijn C# code, maar ik heb geen idee meer wat. Mogelijk zit het hem in het
Mijn C# code ziet er zo uit (ik heb omwille van de duidelijkheid niet-relevante zaken weggelaten):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| namespace DLL_CS { class Program { [DllImport("MyDLL.dll")] private static extern void DLLfunction(ref double[] data, ref int param1, out double result1, out int result2); static void Main(string[] args) { int numRuns = 100; int param1 = 10; double result1; int result2; for (int k = 0; k < numRuns; k++) { DLLfunction(ref data, ref param1, out result1, out result2); } } } } |
De code voor de DLL is als volgt;
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| extern "C" __declspec(dllexport) void getMaxVal(double *& data, int & param1, double & result1, int & result2); BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { return TRUE; } void DLLfunction(double *& data, int & param1, double & result1, int & result2) { // Doe iets met data aan de hand van param1 en lever result1 en result2 terug } |
Heeft iemand een idee waar het mis gaat?
Ik ben geheel voldaan, dank u wel!