Dwa trywialne problemy

0
  1. Szukałem i znalazłem różne ciekawe rzeczy na temat "jak odświeżyć pulpit". A teraz coś podobnego, czego niestety już nie znalazłem: "jak odświeżyć ikony na pulpicie?". Chodzi o to, że zmieniam programowo np. ikonkę Mój Komputer i żeby ikona się zmieniła muszę kliknąć prawym na Pulpit i dać Odśwież. Jak to zrobić programowo?

i 2) Jak wyeksportować z biblioteki DLL procedurę (funkcję) z parametrami i jak potem w programie ją DYNAMICZNIE załadować?

Z góry dzięki za wszelką pomoc. [browar]

0

Ad.2 a poszukac nie łaska? np http://4programmers.net/article.php?id=30

0
  1. Szukałem i znalazłem różne ciekawe rzeczy na temat "jak odświeżyć pulpit". A teraz coś podobnego, czego niestety już nie znalazłem: "jak odświeżyć ikony na pulpicie?". Chodzi o to, że zmieniam programowo np. ikonkę Mój Komputer i żeby ikona się zmieniła muszę kliknąć prawym na Pulpit i dać Odśwież. Jak to zrobić programowo?

Może pomoże:

UpdateWindow(GetDesktopWindow);
0

ad1:
Może pobrać uchwyt shellistview32 (kod jest na forum gdzieś) i wysłać mu komunikatem f5?

0

było... SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);

0

@ŁF: Dzięki Ci wielkie. :) Dokładnie o to mi chodziło. [browar]

@PG: Czytałeś dokładnie co napisałem?

procedurę (funkcję) z parametrami

DYNAMICZNIE załadować

Owszem, w tym artykule jest o eksportowaniu funkcji z DLLa, ale tylko funkcji bezparametrowych. Sam eksport to jeszcze nie problem, gdyż potrafię wyeksportować prockę z parametrem i załadować ją w programie, ale tylko statycznie, a zależy mi na tym żeby to zrobić dynamicznie.
No ale dzięki za fatygę ;-)

0

nic wam się poszukać ani pomyśleć nie chce.
LoadLibrary() + GetProcAddress().

0

Dobra, jako, że mam dobry humor, dam przykład:

type
  TFunkcjaDll = function(Param1: Integer; var Param2: PChar): BOOL; stdcall;
var
  DllFunc: TFunkcjaDll;
begin
// ładujemy bibliotekę DLL, w zmiennej DllHandle mamy wskaźnik :)
// i teraz ładujemy procedurę:
@DllFunc := GetProcAddress(DllHandle, 'NazwaProcedury');
if @DllFunc = nil then
  raise ...
DllFunc(Param1, Param2);

Oczywiście w ten sposób ładujemy też inne dowolne procedury i funkcje :) Mam nadzieję, że jasno się wyraziłem :)

0

Dodam tylko, że konwencja wywołania nie musi byc stdcall, ale MUSI być identyczna w DLL-u i deklaracji w głównym programie.

BTW My nick is PQ

0

Dodam tylko, że konwencja wywołania nie musi byc stdcall, ale MUSI być identyczna w DLL-u i deklaracji w głównym programie.

Oczywiście, ale dorzuciłem konwencję, żeby było wszystko jasne :) Bez średnika przed konwencją wywołania też chodzi, bo miałem takie przebłyski (nie tak dawno temu :) ) że nie stawiałem średnika :)

0

Oki wielkie dzięki za pomoc [browar] .
Sorki PQ [wstyd]

1 użytkowników online, w tym zalogowanych: 0, gości: 1