Функции возвращяемые значения.
От: Ursus Россия  
Дата: 19.11.02 08:44
Оценка:
Есть такая задачка. Я пока не смог найти в MSDN его решение

Есть функция подобная GetProcAddress ( которая возврашяет указатель на функцию )

Ну что то вроде ( В терминах С )

FARPROC GetProcAddress(
HMODULE hModule, // handle to DLL module
LPCSTR lpProcName // function name
);

или, допуститм

LONG GetWindowLong( HWND hWnd,
int nIndex
); // При вызове с nINdex = GWL_WNDPROC, правда, здесь все делается через CallWindowProc, но...


Как эти функции пользовать с C#, и вызывать функции, которые возврашяют эти функции? Как из C# передать CallBack известно, а наоборот?
Да пребудет с тобой Великий Джа
Re: Функции возвращяемые значения.
От: MikaRSDN Soukhov Stock#
Дата: 19.11.02 08:59
Оценка:
Здравствуйте, 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
Re[2]: Функции возвращяемые значения.
От: Ursus Россия  
Дата: 19.11.02 09:31
Оценка:
Здравствуйте, 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
Да пребудет с тобой Великий Джа
Re[3]: Функции возвращяемые значения.
От: MikaRSDN Soukhov Stock#
Дата: 19.11.02 09:48
Оценка:
Здравствуйте, Ursus, Вы писали:

U>Так я ее и пользую, все нормально, Но, что делать с IntPtr, который вернулся, если я хочу вызвать функцию по этому указателю?


Вообще лучше это сделать на MC++ что бы не мучится У IntPtr есть ф-ия ToPointer но она только с не безопастным кодом используется

А вообще вот здесь можно посмотреть как надо
Re[4]: Функции возвращяемые значения.
От: Ursus Россия  
Дата: 19.11.02 14:09
Оценка:
Здравствуйте, MikaRSDN Soukhov, Вы писали:

MS>Здравствуйте, Ursus, Вы писали:



MS>Вообще лучше это сделать на MC++ что бы не мучится У IntPtr есть ф-ия ToPointer но она только с не безопастным кодом используется


Лучше сделать это понятно, меня интересует сама возможность вызвать функцию, зашитую в IntPtr, на C#. На С++ понятно. Просто если весь проект написан на C# делать часть на C++ не хочется Пока не нашел. ToPointer вернет void*, что с ним дальше делать, к чему приравнять, что бы дернуть C-шную функцию, которая там зашита?


MS>А вообще вот здесь можно посмотреть как надо


Это то я дааавно посмотрел, но там не про то, там обратная задача
Да пребудет с тобой Великий Джа
Re[5]: Функции возвращяемые значения.
От: MikaRSDN Soukhov Stock#
Дата: 19.11.02 14:27
Оценка:
Здравствуйте, 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);


Тут помоему твоя задача
Re[6]: Функции возвращяемые значения.
От: Ursus Россия  
Дата: 19.11.02 14:39
Оценка:
Здравствуйте, MikaRSDN Soukhov, Вы писали:

MS>Здравствуйте, Ursus, Вы писали:


U>>Лучше сделать это понятно, меня интересует сама возможность вызвать функцию, зашитую в IntPtr, на C#. На С++ понятно. Просто если весь проект написан на C# делать часть на C++ не хочется Пока не нашел. ToPointer вернет void*, что с ним дальше делать, к чему приравнять, что бы дернуть C-шную функцию, которая там зашита?


U>>

MS>>>А вообще вот здесь можно посмотреть как надо

U>>Это то я дааавно посмотрел, но там не про то, там обратная задача


MS>Какой ты шустрый


MS>Тогда вопрос А ты делал так?


MS>
MS>public delegate bool CallBack(int hwnd, int lParam);
MS>[DllImport("user32")]
MS>public static extern CallBack GetProcAddress(string); 
MS>



Делал, еще вчера Выдает на GetProcAddress "Function pointer was not created by a Delegate."

MS>Тут помоему твоя задача
Да пребудет с тобой Великий Джа
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.