I
Du solltest in den öffentlichen Funktionen keine Referenzen verwenden. C kennt nur Pointer.
Wenn du das Array so definierst wird es am Ende der Funktion zerstört.
Lösungsmöglichkeiten
das Array statisch machen
das Array global machen in der DLL
den benötigten Speicher von aussen übergeben
ist wohl die "sauberste" Lösung, allerdings mit etwas Aufwand beim Aufrufer verbunden. Hier muss die C# Anwendung genug Speicher reservieren. Hierzu kannst (musst?) du Marshal.AllocHGlobal() http://msdn.microsoft.com/en-us/library/aa330452(v=vs.71).aspx verwenden
__declspec(dllexport) int GetPointerAsRef(char inChar, int* refint)
{
static int aforward[6] = {1, 2, 3, 4, 5, 6};
static int areverse[6] = {6, 5, 4, 3, 2, 1};
int p=0;
if(inChar == 'f') {
refint=aforward;
p=1;
}
if(inChar == 'r') {
refint=areverse;
p=1;
}
return p;
}
int aforward[6] = {1, 2, 3, 4, 5, 6};
int areverse[6] = {6, 5, 4, 3, 2, 1};
__declspec(dllexport) int GetPointerAsRef(char inChar, int* refint)
{
int p=0;
if(inChar == 'f') {
refint=aforward;
p=1;
}
if(inChar == 'r') {
refint=areverse;
p=1;
}
return p;
}
__declspec(dllexport) int GetPointerAsRef(char inChar, int* refint,size_t refIntSize)
{
int aforward[6] = {1, 2, 3, 4, 5, 6};
int areverse[6] = {6, 5, 4, 3, 2, 1};
int p=0;
if(inChar == 'f') {
const size_t size = std::min(refIntSize,6);
memcpy(refint,aforward,size);
p=1;
}
if(inChar == 'r') {
const size_t size = std::min(refIntSize,6);
memcpy(refint,areverse,size);
p=1;
}
return p;
}