2010-03-01 13 views

Respuesta

2

Las bibliotecas de C++ pueden ser P/invocadas, pero necesitará usar "depends" para encontrar los nombres de métodos mutilados (nombres como "@ 0! Classname @ classname @ zz") y por ejemplo los métodos usan "ThisCall" llamando a la convención en el p/invoke y pasar la referencia de la instancia como primer argumento (puede almacenar el resultado del constructor dentro de un IntPtr).

+5

Otra alternativa es C++/CLI. –

+3

Este es un consejo terrible. Incluso si es técnicamente posible, se encontrará con MUCHOS problemas tratando de invocar en clases de C++. Por ejemplo, los constructores y los destructores no se llamarán correctamente, el manejo de memoria .NET no es compatible con C++ 'new' y' delete', y así sucesivamente. C++/CLI es una idea mucho mejor. –

+0

¿cómo puede ser esta la respuesta? –

1

Una biblioteca C++ "pura" tendrá su nombre destrozado por el compilador, por lo que será difícil obtener la declaración P/Invoke correcta. Y un método C obtiene un guión bajo al principio, que puede no estar allí en C++. Y un método de C++ necesita una instancia como primer parámetro, debería dársela usted mismo.

Creo que debe ajustar su API de C++ en una serie de métodos compatibles con C.

+0

Solo un método de instancia de un objeto toma 'this' implícito. –

+0

Por supuesto, pero no puedo imaginarme una biblioteca C++ utilizando solo métodos estáticos. – Timores

+0

C++ también permite métodos que no son miembros. – jalf

Cuestiones relacionadas