Ich habe eine C# .NET 2.0 CF-Anwendung, die eine Funktion von einem nativen DLL mit der folgenden Signatur importiert:P/Aufruf eine Funktion mit einer variadische Unterschrift
__declspec(dllexport) void DLL_Foo(int count, ...);
Meine C# Anwendung P/Ruft die Funktion als folgt:
public sealed class MyObject
{
public void Foo()
{
NativeMethods.DLL_Foo(2, __arglist("a","b"));
}
internal static class NativeMethods
{
[DllImport("My.dll")]
internal static extern void DLL_Foo(int count, __arglist);
}
}
Aber, wenn ich MyObject.Foo
aufrufen, ich System.MissingMethodException
bekommen.
Was muss ich ändern, damit dies funktioniert?
Danke, PaulH
Edit: Wenn ich die Importdefinition zu ändern:
internal static extern void DLL_Foo(int count, [MarshalAs(UnmanagedType.LPWStr)]string a, [MarshalAs(UnmanagedType.LPWStr)]string b);
dann rufen:
NativeMethods.DLL_Foo(2, "a", "b");
Es ohne Probleme funktioniert also ist es etwas mit meiner __arglist
Verwendung.
Das ist sehr interessant. Sobald ich zur 'NativeMethods.DLL_Foo (2, new string [] {" a "," b "})' Methode übergehe, gehe ich nicht weiter. Das Programm läuft weiter, wird jedoch nicht in der nächsten Codezeile fortgesetzt. Ich habe auch dies gegen 'wsprintf()' aus coredll.dll versucht, nur um sicher zu sein, es ist nicht die DLL unartig. Gleiches Ergebnis. – PaulH
Oops. Ich hätte mir den Gerätebildschirm ansehen sollen. "Eine native Ausnahme ist in ... aufgetreten." Der Code ist 0x80000002, was meiner Meinung nach eine Fehlausrichtung des Datentyps ist. – PaulH
@Paul Ich denke, Sie müssen wahrscheinlich eine Reihe von Überladungen mit mehreren Strings haben und das sollte den Trick tun - obwohl nicht erreichen, was Sie wollten. – Aliostad