Здравствуйте, Ursus, Вы писали:
U>Есть такая задачка. Я пока не смог найти в MSDN его решение
U>Есть функция подобная GetProcAddress ( которая возврашяет указатель на функцию )
U>Ну что то вроде ( В терминах С )
U>FARPROC GetProcAddress( U> HMODULE hModule, // handle to DLL module U> LPCSTR lpProcName // function name U>);
Для этих целей служит DllInportAttribute Он выполняет туже задачу что и GetProcAddress
Если хочешь ее сам использовать то можно так
[DllImport("Kernel32.DLL", EntryPoint="GetProcAddress", SetLastError=true)]
public static extern IntPrt GetWindowLong(int, string);
U>или, допуститм
U>LONG GetWindowLong( HWND hWnd, U> int nIndex U>); // При вызове с nINdex = GWL_WNDPROC, правда, здесь все делается через CallWindowProc, но...
А тут уже надо использовать DllInportAttribute чтобы импортнуть GetWindowLong
[DllImport("User32.DLL", EntryPoint="GetWindowLong", SetLastError=true)]
public static extern int GetWindowLong(int, int);
U> U>Как эти функции пользовать с C#, и вызывать функции, которые возврашяют эти функции? Как из C# передать CallBack известно, а наоборот?
Если эти ф-ии будут возвращать или принимать указатели на ф-ии то надо выставлять параметр IntPrt
Здравствуйте, MikaRSDN Soukhov, Вы писали:
MS>Здравствуйте, Ursus, Вы писали:
U>>Есть такая задачка. Я пока не смог найти в MSDN его решение
U>>Есть функция подобная GetProcAddress ( которая возврашяет указатель на функцию )
U>>Ну что то вроде ( В терминах С )
U>>FARPROC GetProcAddress( U>> HMODULE hModule, // handle to DLL module U>> LPCSTR lpProcName // function name U>>);
MS>Для этих целей служит DllInportAttribute Он выполняет туже задачу что и GetProcAddress
Это я знаю, но иногда, почему то, он не выполняет( на Win200 Pro ), где то в соседнем треаде я писал, что DllImportAttribute не работает с EditSecurity и CreateSecurityPage. Поэтому и хочу узнать как обходить такие случаи.
MS>Если хочешь ее сам использовать то можно так MS>[DllImport("Kernel32.DLL", EntryPoint="GetProcAddress", SetLastError=true)] MS>public static extern IntPrt GetWindowLong(int, string);
Так я ее и пользую, все нормально, Но, что делать с IntPtr, который вернулся, если я хочу вызвать функцию по этому указателю?
U>>или, допуститм
U>>LONG GetWindowLong( HWND hWnd, U>> int nIndex U>>); // При вызове с nINdex = GWL_WNDPROC, правда, здесь все делается через CallWindowProc, но...
MS>А тут уже надо использовать DllInportAttribute чтобы импортнуть GetWindowLong
MS>[DllImport("User32.DLL", EntryPoint="GetWindowLong", SetLastError=true)] MS>public static extern int GetWindowLong(int, int);
U>> U>>Как эти функции пользовать с C#, и вызывать функции, которые возврашяют эти функции? Как из C# передать CallBack известно, а наоборот?
MS>Если эти ф-ии будут возвращать или принимать указатели на ф-ии то надо выставлять параметр IntPrt
Здравствуйте, Ursus, Вы писали:
U>Так я ее и пользую, все нормально, Но, что делать с IntPtr, который вернулся, если я хочу вызвать функцию по этому указателю?
Вообще лучше это сделать на MC++ что бы не мучится У IntPtr есть ф-ия ToPointer но она только с не безопастным кодом используется
Здравствуйте, MikaRSDN Soukhov, Вы писали:
MS>Здравствуйте, Ursus, Вы писали:
MS>Вообще лучше это сделать на MC++ что бы не мучится У IntPtr есть ф-ия ToPointer но она только с не безопастным кодом используется
Лучше сделать это понятно, меня интересует сама возможность вызвать функцию, зашитую в IntPtr, на C#. На С++ понятно. Просто если весь проект написан на C# делать часть на C++ не хочется Пока не нашел. ToPointer вернет void*, что с ним дальше делать, к чему приравнять, что бы дернуть C-шную функцию, которая там зашита?
Здравствуйте, Ursus, Вы писали:
U>Лучше сделать это понятно, меня интересует сама возможность вызвать функцию, зашитую в IntPtr, на C#. На С++ понятно. Просто если весь проект написан на C# делать часть на C++ не хочется Пока не нашел. ToPointer вернет void*, что с ним дальше делать, к чему приравнять, что бы дернуть C-шную функцию, которая там зашита?
U> MS>>А вообще вот здесь можно посмотреть как надо
U>Это то я дааавно посмотрел, но там не про то, там обратная задача
Какой ты шустрый
Тогда вопрос А ты делал так?
public delegate bool CallBack(int hwnd, int lParam);
[DllImport("user32")]
public static extern CallBack GetProcAddress(string);
Здравствуйте, MikaRSDN Soukhov, Вы писали:
MS>Здравствуйте, Ursus, Вы писали:
U>>Лучше сделать это понятно, меня интересует сама возможность вызвать функцию, зашитую в IntPtr, на C#. На С++ понятно. Просто если весь проект написан на C# делать часть на C++ не хочется Пока не нашел. ToPointer вернет void*, что с ним дальше делать, к чему приравнять, что бы дернуть C-шную функцию, которая там зашита?
U>> MS>>>А вообще вот здесь можно посмотреть как надо
U>>Это то я дааавно посмотрел, но там не про то, там обратная задача
MS>Какой ты шустрый
MS>Тогда вопрос А ты делал так?
MS>