He leído algunos documentos que le da ejemplos sencillos sobre las funciones compatibles con C.¿Cómo puedo importar DLL de una clase C++ dentro de un espacio de nombres
__declspec(dllexport) MyFunction();
estoy okey con eso. Escribo una pequeña aplicación que usa las funciones de este dll. Utilicé vinculación explícita con
LoadLibrary()
función. Las funciones de estilo C funcionan sin problemas. Pero cuando escribo mi clase como
namespace DllTest
{
class Test
{
public:
__declspec(dllexport) Test();
__declspec(dllexport) void Function(int);
__declspec(dllexport) int getBar(void);
private:
int bar;
};
}
#endif
compila bien y se crea Dll. Mientras trabajaba con las funciones de estilo C, simplemente estaba tomando un puntero de función de las funciones LoadLibrary() y GetProcAddress (...).
Mi uso previo es
typedef void (*Function)(int);
int main()
{
Function _Function;
HINSTANCE hInstLibrary = LoadLibrary(TEXT("test.dll"));
if (hInstLibrary)
{
_Function = (Function)GetProcAddress(hInstLibrary,"Function");
if (_Function)
{
// use the function
Pero ahora no tengo ni idea de cómo puedo crear una instancia de mi clase? ¿Cómo puedo usar un enlace explícito o un enlace implícito?
Cualquier ayuda con una muestra de código sería apreciada.
Dos puntos: primero, 'TestInterface' no necesita (ni debería tener) el miembro de datos privados, y segundo, si va a pasar el nombre de la función a' GetProcAddress', la función es mejor 'extern "C" '(de lo contrario, tiene que pasar el nombre destrozado). Y por supuesto, en 'allocate_test', quisiste hacer' return new Test; ', not' return new TestInterface(); '(que no compilará). –
Tienes razón, lo hice a toda prisa y me perdí algunas cosas. – mfontanini