Articles of pinvoke

Llamar a la función Delphi desde C #

Tengo un código fuente de abajo DLL. library Project1; uses System.SysUtils, System.Classes; type IStringFunctions = interface [‘{240B567B-E619-48E4-8CDA-F6A722F44A71}’] function GetMethodValueAsString():PAnsiChar; stdcall; end; TStringFunctions = class(TInterfacedObject, IStringFunctions) public function GetMethodValueAsString():PAnsiChar; stdcall; end; {$R *.res} function TStringFunctions.GetMethodValueAsString():PAnsiChar; stdcall; begin Result := ‘test’; end; procedure GetImplementation(out instance:IStringFunctions); stdcall; export; begin instance := TStringFunctions.Create; end; exports GetImplementation; begin end. Quiero […]

cómo llamar a una función exportada dll de C ++ desde c #

Esta es la primera vez que bash mezclar c # un C ++ no administrado, por lo que esta podría ser una pregunta muy simple, pero no lo entiendo. Necesito llamar algunas funciones de un dll de C ++ al código C #. Aquí está el código para el proyecto dll: el archivo .h: #pragma […]

Llamar a una función DLL delphi desde el código C #

Tengo un DLL comstackdo en Delphi 2007 y un ejemplo que lo usa en otro proyecto de Delphi. Aquí hay una parte del código: TErrorCallback = function(Msg:PChar):byte of object; TSaveEventCallback = function (Line:PChar; HiCode:PChar; LoCode:PChar; MobileNo:PChar):byte of object; function InitModule(ErrorCallback:TErrorCallback; SaveEventCallback :TSaveEventCallback; MainWindowHandle:THandle; Sock_Event:integer):byte; stdcall; external ‘My.dll’ name ‘InitModule’; function DLLSocketEvent(var msg: TMessage): byte; stdcall; […]

Cómo P / Invocar cuando los punteros están involucrados

En un bash de aprender a usar PInvoke en C #, no estoy seguro de cómo manejar varios casos con punteros que involucran tipos de valores simples. Importe las siguientes dos funciones de una DLL no administrada: public int USB4_Initialize(short* device); public int USB4_GetCount(short device, short encoder, unsigned long* value); La primera función usa el […]

¿Cómo importar void * C API en C #?

Dada esta statement de API de C, ¿cómo se importaría a C #? int _stdcall z4ctyget(CITY_REC *, void *); He podido llegar hasta aquí: [DllImport(@”zip4_w32.dll”, CallingConvention = CallingConvention.StdCall, EntryPoint = “z4ctygetSTD”, ExactSpelling = false)] private extern static int z4ctygetSTD(ref CITY_REC args, void * ptr); Naturalmente, en C # el “void *” no se comstack. Algunos […]

¿Es posible obtener el PnPDeviceId de un adaptador de red sin usar WMI?

He estado tratando de obtener el PnPDeviceId de un adaptador de red determinado utilizando p / invocar las llamadas de setupapi sin éxito. Me decidí, a regañadientes, por usar WMI, así: public static string GetPnpDeviceId(string mac) { ManagementObjectCollection mo = Management.GetCollection(“Win32_NetworkAdapter”, “PNPDeviceID”, “MACAddress = ‘” + mac + “‘”); return GetFirstValueString(mo, “PNPDeviceID”); } public static […]

C #: Acceso a DLL de 32 bits / 64 bits dependiendo de la plataforma

usamos una DLL de C ++ de 32 bits de nuestras propias aplicaciones C #. Ahora hemos notado que cuando las aplicaciones de C # se ejecutan en un sistema de 64 bits, el tiempo de ejecución de 64 bits se utiliza automáticamente y, por supuesto, no se puede acceder a la DLL de 32 […]

Accesibilidad Java de 32 bits en una máquina de 64 bits

Tengo una aplicación de 32 bits que hace uso de la accesibilidad de Java (WindowsAccessBridge-32.dll, a través del Java Access Bridge), y funciona perfectamente en una máquina de 32 bits, pero falla en una máquina x64. Creo que lo he rastreado hasta una de las primeras llamadas después de Windows_run: getAccessibleContextFromHWND(hwnd, out vmId, out context) […]

Marshalling a char ** en C #

Estoy interactuando con el código que toma un char** (es decir, un puntero a una cadena): int DoSomething(Whatever* handle, char** error); Básicamente, lleva un identificador a su estado y, si algo sale mal, devuelve un código de error y, opcionalmente, un mensaje de error (la memoria se asigna externamente y se libera con una segunda […]

Controlador USB C # de C ++: SetupDiGetDeviceInterfaceDetail

Tengo un problema al intentar llamar a SetupDiGetDeviceInterfaceDetail desde C #. Siempre devuelve el código de error 1784 (“El búfer de usuario suministrado no es válido para la operación solicitada”). Este es mi código C #: Guid GUID_DEVINTERFACE_DFU = new Guid(0x3fe809ab, 0xfb91, 0x4cb5, 0xa6, 0x43, 0x69, 0x67, 0x0d, 0x52,0x36,0x6e); Guid classGuid = GUID_DEVINTERFACE_DFU; IntPtr hDevInfo […]