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!