Autor Beitrag
Christian123456
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Di 14.04.09 09:54 
Hallo,

habe ein akutes Problem mit einer managed cpp .net dll:

Wenn die Dll als Release mit Visual Studio 2003 (.NET Framework 1.1.4322 SP1) .Net compiliert ist, gibt es direkt beim Aufruf einer DLL-Funktion aus C# heraus folgende Fehlermeldung: “Eine nicht behandelte Ausnahme des Typs 'System.NullReferenceException' ist in Testumgebung.exe aufgetreten.“

Dieser Fehler tritt direkt beim Aufruf der Funktion auf, es erfolgt offenbar erst gar kein Einsprung in die DLL-Funktion! Ich kann jedoch keinen offensichtlichen Fehler erkennen, vor allem verstehe ich nicht warum offenbar nichtmal in die DLL-Funktion eingesprungen werden kann.

Im Disassembly-Fenster sieht man, dass der Fehler bei der Instruktion
00000014 call dword ptr ds:[002769A8h]
auftritt – wieso geht dieser call offenbar schief?

Nachfolgend und anbei die DLL-Funktion incl. C#-Projekt (bereits weitestgehend vereinfacht, sehr übersichtlich, bitte selbst testen!):

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
void TestClass::Testfunc([Out] TestStruct (&testList) __gc[])
{
    testList = new TestStruct __gc[5];

    for (int i=0; i<5; i++)
    {
        if (i>0)
        {
            testList[i].curDivTime = testList[i].curDivTime - testList[i-1].curDivTime; 
        }
    }       
}



Wichtig: die DLL muss als RELEASE compiliert sein, das C#-Projekt kann als DEBUG oder als RELEASE erstellt sein.

Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt
Einloggen, um Attachments anzusehen!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19340
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 14.04.09 17:13 
Hallo und :welcome: bei uns!

Das einzige was mir auf Anhieb auffällt ist, dass testList[0].curDivTime nie initialisiert, sondern nur verwendet wird.

Ich werde mir das einmal anschauen, habe aber mit DLLs wenig Erfahrung unter VS und so besonders viel auch mit C# nicht. Vielleicht sagt ja sonst noch jemand etwas dazu.
Christian123456 Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Di 14.04.09 20:35 
Hallo,

ja richtig, die UInt64-Variable curDivTime wird nicht initialisiert, somit ist die Differenzbildung sinnfrei :)
Ist aber nur der techn. relevante Ausschnitt aus meiner eigentlichen DLL - nur um das Problem darzustellen.
Techn. muss die Differenzbildung ja unabhängig vom Inhalt der UInt64-Variablen funktionieren....

Wäre super wenn Du sonst noch eine Idee hast...

Danke und Gruß