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!):
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.
Im Disassembly-Fenster sieht man, dass der Fehler bei der Instruktion
00000014 call dword ptr ds:[002769A8h]
auftritt – wieso geht dieser call offenbar schief?
da ich deine ramaddressen nicht auswendig kenn aund auch nciht weiß was hinder diesen addressen pasiert musst du folgendes machen:
[[FAQ] NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt ](http://www.mycsharp.de/wbb2/thread.php?threadid=20478)
achte darauf, das in den debugoptionen das feld "nur meinen code" deaktiviert ist und das die entsprechende .PDB datei neben der zu testenden dll liegt. wenn er in die funktion springen will, fragt er dich dann nach der entsprechenden source-datei und schon bist du drinn.
Hi,
danke für die Info, aber ich denke das hilft mir nicht weiter:
Bitte einfach mal ausprobieren, Projekt zum Download siehe Originalbeitrag.** Aber mit Visual 2003 und DLL im Release-Build!**
Visual Studio 2003 hat keine Debug-Option "nur meinen code"
schau in den optionen nach.
die aufgerufenene DLL-Funktion ist eine Static-Funktion und es ist aus meiner Sicht kein Objektverweis erforderlich um diese aufzurufen; daher ist mir völlig rätselhaft wo die NullReferenceException herkommt
irrelevant. die exception kann auch innerhalb der methode auftreten.
wenn ich die DLL im Debug-Build kompiliere kann ich fehlerfrei durchsteppen, nur im Release-Build tritt der Fehler auf
interessant aber dennoch -> siehe faq.
Hi,
ich kenne die Option von Visual 2005 (Extras -> Optionen -> Debuggen -> Allgmeein -> "Nur meinen Code aktivieren (nur verwaltet)"), aber bei 2003 gibt es sie meiner Meinung nach nicht, zumindest nicht an dieser Stelle
in der DLL wird der try-catch-Exception-Handler nicht durchlaufen, in C# ist ex.StackTrace nicht hilfreich: " at TestDll.TestClass.Testfunc(TestStruct[]& testList)\r\n at Testumgebung.Form1.button1_Click(Object sender, EventArgs e) in c:\temp\dlltest\testumgebung\form1.cs:line 96" string"
Wenn Du fit in dieser Thematik bist, lade bitte meinen Code aus dem Originalthread und schau es Dir selbst an, ist sehr übersichtlich! Es ist nicht mein erstes Debug-Problem und ich denke nicht dass es ein ganz trivialer Anfänger-Fehler ist.
sry, ich habe kein vs2003 mehr aber dll-code debuggen ist auch in vs2003 möglich.
außerdem legst du zwar ein array eines types an aber nciht dessen inhalt, was in c# zumindest diese exception auslöst.
Schade, danke trotzdem für die Hilfe.
Weitere Infos:
Wer kennt sich bei diesem "hässlichen" Schnittstellenproblem noch aus und kann mir weiterhelfen? Ich kämpfe bereits seit längerem ohne Erfolg mit diesem Problem.
- die Exception erfolgt definitiv nicht erst beim Ausführen der potentiell kritischen Zeile "testList_.curDivTime = testList_.curDivTime - testList[i-1].curDivTime;" sondern bereits beim Aufruf der DLL-Funktion
Und woher weißt Du das ?
Hallo Christian123456,
geschlossen wegen Crosspost in einem anderen Forum. Beachte [Hinweis] Wie poste ich richtig? Punkt 2.
herbivore