Skocz do zawartości

[C++] DLL problem


gong

Polecane posty

Otrzymałęm Dll z opisem procedury "L72ToG89"

(extern "C" _declspec (dllimport) void _stdcall L72ToG89(double xi, double yi, double Hi, double *lat, double *lon, double *height);)

 

Chciałbym ją wykorzystać w programie do transformacji. Napisałem prostą konsolową aplikacje(by strywializować problem) w VS C++, która ma wczytać współrzedne z pliku i zrealizować prodecurę (transformacja współrzędnych) mam jednak problem. wyświetla mi sie:

 

ERRORS list:

1>Be2008.obj : error LNK2019: unresolved external symbol __imp__L72ToG89@36 referenced in function _main

1>C:\Documents and Settings\MLz\Moje dokumenty\Visual Studio 2008\Projects\Be2008\Debug\Be2008.exe : fatal error LNK1120: 1 unresolved externals

 

DLL umieściłem w folderze z exe. Proszę o pomoc lub jakieś wskazówki...Z góry dziękuje

 

 

#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
#include <windows.h>

extern "C" _declspec (dllimport) void _stdcall L72ToG89(double xi, double yi, double Hi, double *lat, double *lon, double *height);

void main(){

       double x,y,z,xl,yl,zl,lat,lon,height;   
       double *xx,*yy,*zz;

       xx=&lat;
       yy=&lon;
       zz=&height;

       int count=0;

       FILE *plik=NULL;
       FILE *plik2=NULL;
       errno_t err = 0;
       errno_t err2 = 0;
       err=fopen_s(&plik,"L72grid5km.txt","r+");
       err2=fopen_s(&plik2,"ResulTgrid5km.txt","w");

               if ((err != 0) ||plik==NULL) 
               {
                       printf("Error opening file or file doesn't exist");
                       abort();
               }
               else
                       while(!feof(plik))
                       {
                               fscanf(plik,"%lf %lf %lf",&x,&y,&z);
                               printf("%.3lf %.3lf %.3lf\n",x,y,z);
                               L72ToG89(x,y,z,xx,yy,zz);
                               count++;
                       }
                       fclose(plik2);
                       fclose(plik);
                       printf("Raw number: %d\n",count);
getch();
}

Link do komentarza
Udostępnij na innych stronach

Próbowałem również sprawdzić..czy dll jest podłączony czy nie...Tym razem win32 aplikacja...ale również otrzymuje komunikat

"Biblioteka została usunięta z pamięci" czyli nie działa....

 

#define WINAPI _stdcall
#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
#include <windows.h>

extern "C" _declspec (dllimport) void _stdcall L72toG89();

BOOL WINAPI DllMain (HINSTANCE hInstance, DWORD dwReason, LPVOID pVoid)
{
    switch(dwReason)
    {
         case DLL_PROCESS_ATTACH:
               MessageBox (NULL, L"Biblioteka załadowana poprawnie.", L"Komunikat", MB_OK | MB_ICONINFORMATION);
                               break;
         case DLL_PROCESS_DETACH:
             MessageBox (NULL, L"Biblioteka została usunięta z pamięci.", L"Komunikat", MB_OK | MB_ICONINFORMATION);
             break;
    }
    return TRUE;
}

int WINAPI WinMain ( HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
{
       HINSTANCE       aaa=NULL;
       DWORD           bbb=NULL;       
       LPVOID  ccc=NULL;

       BOOL c=true;
       c=DllMain(aaa,bbb,ccc);

       return 0;
}

Link do komentarza
Udostępnij na innych stronach

dostajesz blad od linkera ze nie moze znalezc procki i tyla, baaardzo dawno juz w c++ nie pisalem ale w kodzie twoim nie widze nigdzie wskazania w jakim module/libie to ma byc. Jesli robisz statyczne linkowanie (a wyglada mi ze to chcesz wlasnie robic) to zazwyczaj do projektu dodaje sie .lib z metodami ktore sobie linker lyka. Inaczej uzyj procedor LoadLibrary/FreeLibrary + GetProcAdrr. Chyba ze konstrukcja c++ (lub ustawienia w projekcie) maja mozliwosc dodania/wskazania dodatkowych modulow z ktorych ma nastapic dolinkowanie metod.

Always Dark<br />u1_tt_logo.png banner-1.pngexFabula-banner.pngson_banner_ubersmall.jpg

Link do komentarza
Udostępnij na innych stronach

Dzięki za pomoc...rzeczywiście w VC++ jest opcja dolinkownia w projekcie.

Modify the Additional Dependencies property. Dołączyłęm plik .lib i działa...

Pokombinuje jeszcze z LoadLib przyda mi sie...

Jeszcze raz dzięki...

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...