Por alguna razón, cada vez que mi aplicación C# .NET 2.0 realiza una llamada a GetProcAddress
siempre devuelve cero.C# GetProcAddress Devuelve cero
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.
}
}
Estoy seguro que el nombre de la función está escrito correctamente, y _fullPath
es presumiblemente correcta porque _dllHandle
siempre se le asigna un valor distinto de cero. Cualquier información que pueda proporcionar es apreciada. Gracias.
+1, lo tienes antes de que lo viera. –
¡Eso hizo el truco! ¡Gracias! –
+1 ¡He estado insinuando mi cabeza contra la pared durante horas hasta que google me envió aquí!Después de todo, solo era cuestión de agregar ** CharSet = CharSet.Ansi ** a los parámetros nombrados del atributo ** DllImport ** para que funcionase. –