Hej! Mam problem z importem biblioteki DLL (np. napisanej w MS Visual C++) do środowiska CA Visual Objects 2.7 :(
W drugą stronę tzn. DLL stworzoną w CA Visual Objects bez problemu importuję do MS Visual C++ i wywołuje funkcje.
Natomiast nie potrafię sobie poradzić z importem zewnętrznych bibliotek i funkcji do CA Visual Objects...
P.S. Nie pytajcie czemu używam tego środowiska :D Po prostu przymus. Dwa dość spore systemy są napisane w tym języku/środowisku i muszę go z grubsza ogarnąć....
a konkretnie z czym masz problem? Nie potrafisz kodu napisać, masz błędy podczas importu, masz błędy podczas wywoływania funkcji z tych bibliotek?
Tzn. przykładowo jest jakaś funkcja powiedzmy informacja(); stworzona w MS Visual C++. Tą bibliotekę ładuje np. w WxWidgets C++ i wywołuje funkcję informacja() więc biblioteka jest napisana ok. :)
Problem jak chce tą funkcję wywołać z poziomu Visual Objects
_DLL FUNCTION informacja() ; AS VOID PASCAL:mojadll.dll
Visual Objects wyrzuca błąd przy kompilacji: Missing library name. Biblioteke przerzuciłem to katalogu tam gdzie jest generowany exe (domyślnie C:\CAVO27\Bin).
W dokumentacji jest przykład na wywołanie funkcji w Windows API...
na 99% ma nie być średnika po Informacja()
a przed AS
O dzięki :) To coś źle odczytałem z dokumentacji, bo taki przykład był :
Examples
The following examples illustrate _DLL declarations for various Windows API functions:
_DLL FUNCTION MessageBeep(siLevel AS SHORTINT) ;
AS VOID PASCAL:USER.MESSAGEBEEP
_DLL FUNCTION MessageBox(hwndParent AS WORD, ;
pszText AS PSZ, ;
pszCapt AS PSZ, ;
wFlags AS WORD) ;
AS SHORTINT PASCAL:USER.MESSAGEBOX
Teraz wyrzuca komunikat "Nie znaleziono punktu wejścia procedury dll w bibliotece mojadll.dll" :/
Hmmm w bibliotece tzn. w kodzie do niej funkcje mam tak zadeklarowaną :
plik mojadll.cpp
#include "stdafx.h"
#include "mojadll.h"
MOJADLL_API int nmojadll=0;
MOJADLL_API void informacja(void)
{
MessageBoxA(NULL, "Przykładowa biblioteka DLL!", "Informacja", MB_ICONINFORMATION);
}
plik mojadll.h
#ifdef MOJADLL_EXPORTS
#define MOJADLL_API __declspec(dllexport)
#else
#define MOJADLL_API __declspec(dllimport)
#endif
extern MOJADLL_API int nmojadll;
MOJADLL_API int fnmojadll(void);
extern "C" MOJADLL_API void informacja(void);
plik dllmain.cpp
#include "stdafx.h"
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}