Dll dev cpp - linking problem


(Ganda666) #1

Witam,

korzystam z devcpp, zrobilem w nim DLL ( file, new, project, dll). W innej aplikacji probuje wywolac funkcje zawarta w DLLce, otrzymuje nastepujacy blad:

[Linker error] undefined reference to `_imp___Z15GetArrayFromBMPPc'

Normalnie taki blad dostaje gdy nie zalacze pliku .lib do linkera.

Podczas tworzenia DLL devcpp nie stworzyl pliku .lib, tylko .dll , .a, .def .

Czy problem tkwi w tym, ze nie ma pliku .lib?

Jesli tak to jak ten plik stworzyc?

Z gory dziekuje za pomoc!


(Ryan) #2

Są przynajmniej 3 sposoby na załadowanie DLLki w programie: przy starcie, opóźnione, dynamiczne. Dwa pierwsze wymagają LIBa, ostatni nie. Jest o tym seria na CodeProject, nie ma sensu, żebym tutaj przepisywał ich informacje.

http://www.codeproject.com/dll/XDllPt1.asp

http://www.codeproject.com/dll/XDllPt2.asp

http://www.codeproject.com/dll/XDllPt3.asp

http://www.codeproject.com/dll/XDllPt4.asp


(Ganda666) #3

W moim programie laduje biblioteke dynamicnzie. Kiedys uzylem tego samego kodu do innej DLL i dzialalo ( z tym,ze do tamtej DLLki mialem plik .lib):

#include 

#include 

#include 

#include "EasyBMP.h"

#include "bmp1.h"


using namespace std;



typedef float***(*fun)(char *);


typedef int (*fun1)(char *,float ***,int , int ,int ,int );



 int main(int argc, char *argv[]) {


    char *file="example1.bmp", *file1="example7.bmp";

    float ***array;


    HMODULE hModule = LoadLibrary("bmp1.dll");

    if(hModule == NULL) return 0;  



    fun hFun =(fun)GetProcAddress(hModule, "GetArrayFromBMP");  

    if (hFun == NULL) return 0; 


    array=GetArrayFromBMP(file);


    fun1 hFun1 =(fun1)GetProcAddress(hModule,"GetArrayToBMP");

    if (hFun1 == NULL) return 0; 

    GetArrayToBMP(file1,array,100,100,8,1);


    FreeLibrary(hModule);    

        //system("PAUSE");

    return EXIT_SUCCESS;

  }

(Ryan) #4

Jasne, że nie działa. Zerknij tutaj:

fun hFun =(fun)GetProcAddress(hModule, "GetArrayFromBMP");  

    if (hFun == NULL) return 0; 


    array=GetArrayFromBMP(file);

Tworzysz funkcję hFun, któa odpowiada wywołaniu GetArrayFromBMP z dllki, ale próbujesz wywołać GetArrayFromBMP zamiast hFun. Powinno być:

fun hFun =(fun)GetProcAddress(hModule, "GetArrayFromBMP");  

    if (hFun == NULL) return 0; 


    array=hFun(file);

Podobny błąd występuje jeszcze raz ciut niżej.