gong Napisano Maj 6, 2008 Zgłoś Share Napisano Maj 6, 2008 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=⪫ 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 More sharing options...
gong Napisano Maj 6, 2008 Autor Zgłoś Share Napisano Maj 6, 2008 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 More sharing options...
Toster Napisano Maj 6, 2008 Zgłoś Share Napisano Maj 6, 2008 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 /> Link do komentarza Udostępnij na innych stronach More sharing options...
gong Napisano Maj 6, 2008 Autor Zgłoś Share Napisano Maj 6, 2008 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 More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.