2011-06-12 2 views
31

Me encontré con una herramienta que genera firmas P/Invoke para los propios archivos DLL no administrados de Microsoft: PInvoke Interop Assistant¿Hay alguna herramienta que genere firmas de P/Invoke para DLL arbitraria no administrada?

¿Existe una herramienta similar que generará P/Invoke firmas para DLL no administrados de terceros?

Alternativamente, cualquier forma de alimentar a una DLL de terceros para PInvoke Interop Assistant

EDIT: Actual issue estoy tratando de resolver

+1

En general, necesitaría alimentar un archivo de encabezado, ya que las tablas de exportación DLL no tienen información de firma (excepto los nombres alterados de C++, pero P/Invoke no puede manejar la mayoría de las firmas de C++ de todos modos). ¿Tiene un archivo de encabezado con las declaraciones de funciones? –

+1

¿Por qué dices que la asistente es solo para el dll de Microsoft? Debe admitir cualquier archivo C/C++. –

+9

Cualquier herramienta que prometa firmas de pinvoke sin problemas te está vendiendo aceite de serpiente. El Asistente de Interoperación de PInvoke funciona bastante bien debido a las anotaciones de SAL en los encabezados de Windows. Eso no estará disponible en el tuyo. La mejor herramienta es la que tienes entre tus oídos. Y entonces. –

Respuesta

40

Google encontró rápidamente http://www.pinvoker.com/

de Microsoft C++/compilador CLI también puede hacer esto , si usa /clr:safe y #include el archivo de encabezado, generará p/invoke code que puede extraer con, por ejemplo, ILSpy (gratis) o Red Gate Reflector (solía ser gratis).

+1

¿razón por qué votar a la baja? –

+1

Encontré tu comentario sobre C++/CLI útil y modificado. – GregC

+2

@GregC: lo aprecio. Son las personas que me han vengan abajo de las que me gustaría obtener alguna explicación. –

-3

Uso Dumpbin.exe que viene con el SDK VS, Dumpbin, todavía tendrá que escribir manualmente las firmas PInvoke partir de los datos objeto de dumping

+0

No es una solución en absoluto. – crypted

+1

La salida de Dumpbin no contiene información de tipo, ya que esta información no existe en el binario para las funciones que se exportan como 'extern' C "'. Las exportaciones de C++ se exportan usando nombres decorados que Dumpbin puede eliminar. Aún así, no es una respuesta a esta pregunta. – IInspectable

13

utilizo PInvoke Interop Assistant para DLL no administrados mediante el uso de la tercera pestaña en el UI, marcado "SigImp Translate Snippet". Simplemente copie y pegue su encabezado en la ventana "Fragmento de código nativo" y presione Generar (o active Generar automáticamente). Como ilustración, aquí hay un código de question of mine. Tenga en cuenta que, por alguna razón, los errores no aparecen en el panel Error, sino como comentarios en la parte superior del código generado.

Como ya han dicho varias personas, el código generado se debe utilizar como una guía; puede que tenga que hacer cambios para obtener exactamente lo que desea.

enter image description here

Cuestiones relacionadas