From: Thomas Kehl on
Hallo zusammen.

Ich benutze in meiner Application ChangeWindowMessageFilter() um für
den Betrieb der Applikation auf Vista oder W7 eine bestimmte Message
zuzulassen. Nun habe ich das Problem, dass die Applikation auch unter
Windows XP ausgeführt wird. Ich bin nun auf der Suche, die Funktion
mittels LateBinding in C# aufzurufen. Folgendes habe ich schon:

[DllImport("kernel32.dll")]
static extern IntPtr LoadLibrary(string csFileName);
[DllImport("kernel32.dll")]
static extern IntPtr GetProcAddress(IntPtr IntPtr_Module, string
csProcName);
[DllImport("kernel32.dll")]
static extern bool FreeLibrary(IntPtr IntPtr_Module);


private static void AllowWM_COPYDATA() {
IntPtr IntPtr_MyLib = LoadLibrary("user32.dll");
IntPtr IntPtr_MyFunc = GetProcAddress(IntPtr_MyLib,
"ChangeWindowMessageFilter");

// XXXXXXX

FreeLibrary(IntPtr_MyFunc);
}

Was mir nun noch fehlt ist, wie ich die Funktion bei XXXXX nun auch
noch aurfufen kann? - Kann mir hier jemand helfen? - Besten Dank.

Herzliche Grüsse, Thomas
From: Jeroen Mostert on
Thomas Kehl wrote:
> Hallo zusammen.
>
Ebenso Hallo. Aber ein Tipp: die Gemeinsprache hier ist Englisch, und
microsoft.public.de.german.entwickler.dotnet.csharp benutzen gibt bessere
Chancen auf ein gutes Antwort.

> Ich benutze in meiner Application ChangeWindowMessageFilter() um f�r
> den Betrieb der Applikation auf Vista oder W7 eine bestimmte Message
> zuzulassen. Nun habe ich das Problem, dass die Applikation auch unter
> Windows XP ausgef�hrt wird. Ich bin nun auf der Suche, die Funktion
> mittels LateBinding in C# aufzurufen. Folgendes habe ich schon:
>
> [DllImport("kernel32.dll")]
> static extern IntPtr LoadLibrary(string csFileName);
> [DllImport("kernel32.dll")]
> static extern IntPtr GetProcAddress(IntPtr IntPtr_Module, string
> csProcName);
> [DllImport("kernel32.dll")]
> static extern bool FreeLibrary(IntPtr IntPtr_Module);
>
>
> private static void AllowWM_COPYDATA() {
> IntPtr IntPtr_MyLib = LoadLibrary("user32.dll");
> IntPtr IntPtr_MyFunc = GetProcAddress(IntPtr_MyLib,
> "ChangeWindowMessageFilter");
>
> // XXXXXXX
>
Dies alles ist nicht notwendig. C# wird P/Invoke Funktionen immer dynamisch
anrufen, es wird also kein statischer Import im Assembly generiert woran das
Laden scheitern k�nnte. Du kannst also einfach ChangeWindowMessageFilter()
importieren mittels DllImport, die Funktion anrufen und die
EntryPointNotFoundException abfangen. Dass soll ebenfalls nur einmal
geschehen (dass Resultat soll gecached werden), sonst wird der Performance
darunter leiden.

--
J.
From: Thomas Kehl on
Hallo Jeroen

Besten Dank für den Hinweis. Werde ich gleich probieren.
Hab grad als ich mein Post gesucht habe festgestellt, dass ich mich in
der NG vertan habe.

Beste Grüsse, Thomas

On 23 Okt., 19:34, Jeroen Mostert <jmost...(a)xs4all.nl> wrote:
> Thomas Kehl wrote:
> > Hallo zusammen.
>
> Ebenso Hallo. Aber ein Tipp: die Gemeinsprache hier ist Englisch, und
> microsoft.public.de.german.entwickler.dotnet.csharp benutzen gibt bessere
> Chancen auf ein gutes Antwort.
>
>
>
>
>
> > Ich benutze in meiner Application ChangeWindowMessageFilter() um für
> > den Betrieb der Applikation auf Vista oder W7 eine bestimmte Message
> > zuzulassen. Nun habe ich das Problem, dass die Applikation auch unter
> > Windows XP ausgeführt wird. Ich bin nun auf der Suche, die Funktion
> > mittels LateBinding in C# aufzurufen. Folgendes habe ich schon:
>
> >     [DllImport("kernel32.dll")]
> >     static extern IntPtr LoadLibrary(string csFileName);
> >     [DllImport("kernel32.dll")]
> >     static extern IntPtr GetProcAddress(IntPtr IntPtr_Module, string
> > csProcName);
> >     [DllImport("kernel32.dll")]
> >     static extern bool FreeLibrary(IntPtr IntPtr_Module);
>
> >     private static void AllowWM_COPYDATA() {
> >         IntPtr IntPtr_MyLib = LoadLibrary("user32.dll");
> >         IntPtr IntPtr_MyFunc = GetProcAddress(IntPtr_MyLib,
> > "ChangeWindowMessageFilter");
>
> >         // XXXXXXX
>
> Dies alles ist nicht notwendig. C# wird P/Invoke Funktionen immer dynamisch
> anrufen, es wird also kein statischer Import im Assembly generiert woran das
> Laden scheitern könnte. Du kannst also einfach ChangeWindowMessageFilter()
> importieren mittels DllImport, die Funktion anrufen und die
> EntryPointNotFoundException abfangen. Dass soll ebenfalls nur einmal
> geschehen (dass Resultat soll gecached werden), sonst wird der Performance
> darunter leiden.
>
> --
> J.- Zitierten Text ausblenden -
>
> - Zitierten Text anzeigen -