Как передать РУЧКИ между C # .NET и C Win32 DLL? - PullRequest
0 голосов
/ 06 апреля 2011

У меня есть приложение на C # .NET и неуправляемая программа C Win32 .DLL. Как я могу передать РУЧКИ между двумя приложениями? Я имею в виду, я хочу установить HANDLE из кода C в выходной параметр, который приходит из C #, и снова передать HANDLE из C # в другую функцию в DLL? Я думаю, это связано с IntPtr, но я не знаю, каким должен быть код C & C #!

спасибо.

Ответы [ 3 ]

3 голосов
/ 06 апреля 2011

Чтобы вызвать код C из C #, вы можете использовать атрибут DllImportAttribute для указания параметра как IntPtr:

[DllImport("mydll.dll", EntryPoint="my_c_function")]
public static extern void my_c_function(IntPtr myHandle);

[DllImport("mydll.dll", EntryPoint="my_c_function_with_out_param")]
public static extern void my_c_function(out IntPtr returnedHandle);

Просто убедитесь, что ваши функции C выглядят так:

void my_c_function(HANDLE myHandle) 
{   
    // ....
}

void my_c_function_with_out_param(HANDLE * pReturnedHandle)
{
   // ....
   *pReturnedHandle = GenerateHandle();    
}
0 голосов
/ 06 апреля 2011

HANDLE определяется как void*, т.е. что-то размером с указатель.Эквивалент в управляемом мире - IntPtr.

0 голосов
/ 06 апреля 2011

Просто приведите его к типу IntPtr в коде C.

...