2011-07-11 14 views
8

Estoy trabajando en un archivo DLL que se utilizará desde otro idioma (por lo tanto, no importar libs e incluir los encabezados de dll) mediante el llamado a la llamada _stdcall. El problema es que VC++ parece siempre hacer alguna decoración de nombre en sus símbolos exportados. Todas las referencias que he visto dicen que use extern "C", pero esto parece dejarme con un subrayado inicial y un @ más un número después del nombre exportado.VC++ previene todas las decoraciones del nombre de símbolo

Lo peor es que los medios automatizados para cargar dll de extensión en el idioma de destino hacen esencialmente "func_name = GetProcAddress (dll," func_name ")" así que usando un nombre no decorado GetProcAddress falla, y usando el nombre decorado se queja de (no se permite la @) nombre de variable ilegal :(

¿Cómo puedo hacer VC++ somthing exportación sin decoraciones nombre en absoluto?

extern "C" __declspec(dllexport) int __stdcall test(int x, const char *str); 

Dumpbin.exe

00011366 _test @ 8 = @ ILT + 865 (_test @ 8)

+0

hay una razón de utilizar stdcall en lugar de cdecl? – CharlesB

+1

¿A qué idioma estás apuntando? ¿Por qué 'GetProcAddress' falla, devuelve la dirección de la función, no el nombre, y no conozco ningún lenguaje de programación que prohíba el uso de un '@' en las cadenas – Djole

+0

, vea http://stackoverflow.com/q/4550294/11343 – CharlesB

Respuesta

6

Puede usar un archivo .def. Le permitirá exportar las funciones sin las decoraciones.

Leer: Exporting from a DLL Using DEF Files

+0

Esto parece hacer lo que quiero y supongo que es lo que hacen otros dll en lugar de usar __declspec. Sería bueno si se pudiera hacer con __declspec, pero como tengo que mantener una lista para la importación automática más tarde tener uno en .def no es mucho trabajo extra. – SyncViews

Cuestiones relacionadas