Страница 1 из 1

создание и использование dll

Добавлено: 29 апр 2010, 13:43
alexakafranc
Всем доброго времени суток!
Среда выполнения Borland Builder
проблема в вызове метода класса зашитого в dll
//содержание dll
//main.cpp

Код: Выделить всё

#include <vcl.h>
#include <windows.h>
#pragma hdrstop
#include "dll_lmain.h"
#include <stdio>
#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
	return 1;
}

MyClass::MyClass()
{
	field =10;
}

bool MyClass::Message(int a,int b)
	{
  	  int c=  a+b;
  	  field = c;
     return true;
  	  //printf("asdds=%i",c);
	}

DLL_SPEC MyClass* ClassReturn()
{
    MyClass* my = new MyClass();
    return my;
}
//содержание dll_main.h

Код: Выделить всё

#define DLL_SPEC extern "C" __declspec(dllexport)

class MyClass
{
public:
	MyClass();
    int field;
    bool Message(int a,int b);
};
//Основной проект

Код: Выделить всё

    MyClass* (*ClassReturn)();
    MyClass* my;
    HINSTANCE hLib = LoadLibrary("mydll.dll");
    if (hLib) {
        ClassReturn= (MyClass*(*)()) GetProcAddress(hLib, "_ClassReturn");
        if (ClassReturn)
        {
        	my = ClassReturn();
            Label1->Caption = IntToStr(my->field);
            my->field =3;
            //my->Message(2,3);                          //здесь выдает ошибку             
            Label2->Caption = IntToStr(my->field);
        }
    }
    FreeLibrary(hLib);
Ошибка [Linker Error] Unresolved external 'MyClass::Message(int, int)' referenced from C:\123\DLL\UNIT1.OBJ

Re: создание и использование dll

Добавлено: 29 апр 2010, 15:20
IceFlame
Надо либо подключать dll статически, либо делать Message чисто виртуальной функцией. А вообще надо использовать интерфейсы, как в COM.