Wenn meine C# .NET 2.0-Anwendung einen Aufruf an GetProcAddress
aufruft, gibt es aus irgendeinem Grund immer Null zurück.C# GetProcAddress gibt Null zurück
public class MyClass
{
internal static class UnsafeNativeMethods
{
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
internal static extern IntPtr LoadLibrary(string lpFileName);
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
internal static extern bool SetDllDirectory(string lpPathName);
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
internal static extern IntPtr GetProcAddress(IntPtr hModule, string procName);
}
private void MyFunc()
{
IntPtr _dllHandle;
IntPtr _fptr;
string _fullPath = ".\\mydll.dll";
string _procName = "MyDllFunc";
_dllHandle = UnsafeNativeMethods.LoadLibrary(_fullPath);
_fptr = UnsafeNativeMethods.GetProcAddress(_dllHandle, _procName); // <-- Always returns zero.
}
}
Ich bin sicher, dass der Funktionsname richtig geschrieben ist, und _fullPath
ist vermutlich richtig, weil _dllHandle
immer einen Wert ungleich Null zugewiesen wird. Jeder Einblick, den Sie möglicherweise bereitstellen können, wird geschätzt. Vielen Dank.
+1, du hast das, bevor ich es sah. –
Das hat den Trick gemacht! Vielen Dank! –
+1 Ich habe meinen Kopf stundenlang an die Wand gelehnt, bis mich Google hierher geschickt hat!Schließlich war es nur eine Frage des Hinzufügens von ** CharSet = CharSet.Ansi ** zu den benannten Parametern des ** DllImport ** -Attributs, damit es funktioniert. –