Ik ben een beetje aan het klooien met de InteropService van Microsoft.
De situatie is als volgt:
Ik heb een unmanaged C++ methode gedefinieerd als volgt:
Deze wordt gecompiled tot mijn_dll.dll en dat werkt goed zonder error's.
De methode veranderd de waarde van c. Deze waarde moet in C# weer te gebruiken zijn.
In C# heb ik het volgende staan:
En deze methode wordt aangeroepen op de volgende manier
Nu krijg ik in doeBlaat bij het aanroepen van blaat(sBlaat) een keiharde herinnering dat ik niet in andermans geheugen mag gaan kloten
Hoe kan ik op een nette manier mijn const char* methode in C++ aanspreken in C#? Het Internet staat vol met website's over dit maar ik krijg het niet werkend.
De situatie is als volgt:
Ik heb een unmanaged C++ methode gedefinieerd als volgt:
C++:
1
2
| //In de header file... extern "C" __declspec(dllimport) bool blaat( const char* c); |
Deze wordt gecompiled tot mijn_dll.dll en dat werkt goed zonder error's.
De methode veranderd de waarde van c. Deze waarde moet in C# weer te gebruiken zijn.
In C# heb ik het volgende staan:
C#:
1
2
| [DllImport(mijn_dll.dll)] unsafe public static extern bool blaat(ref string s); |
En deze methode wordt aangeroepen op de volgende manier
C#:
1
2
3
4
| public void doeBlaat( string sBlaat ) { blaat(ref sBlaat); } |
Nu krijg ik in doeBlaat bij het aanroepen van blaat(sBlaat) een keiharde herinnering dat ik niet in andermans geheugen mag gaan kloten
code:
1
2
3
| An unhandled exception of type 'System.AccessViolationException' occurred in mijnProject.dll Additional information: Attempted to read or write protected memory. This is often an indication that other memory is corrupt. |
Hoe kan ik op een nette manier mijn const char* methode in C++ aanspreken in C#? Het Internet staat vol met website's over dit maar ik krijg het niet werkend.