Внешний вызов метода C из C # - PullRequest
0 голосов
/ 03 августа 2011

У меня есть C код библиотеки, в котором определен метод extern:

typedef unsigned int    U32;
extern U32 iw(U32 b, U32 p);

У меня также есть код Assembler, в котором определен этот метод.

Как я могу вызвать этот C (или может быть даже Assembler) метод из кода C #?
Могу ли я использовать атрибут DllImport ?

Ответы [ 2 ]

2 голосов
/ 03 августа 2011

Просто имейте в виду, что вам нужно учитывать соглашения о вызовах.Большинство Win32 API написано для использования stdcall, поэтому P/Invoke по умолчанию использует stdcall.Однако VC ++ использует CDecl по умолчанию.

Если у вас возникнут проблемы, вы можете либо изменить экспортируемую функцию на stdcall, либо изменить объявление P/Invoke (я думаю, что есть необязательный CallingConvention аргумент атрибута DllImport)

1 голос
/ 03 августа 2011

Да, вы можете использовать что-то вроде следующего для вызова вашей функции C dll:

[DllImport("your.dll", EntryPoint="iw")]
public static extern UInt32 NiceNameFunc(UInt32 niceNameA, UInt32 niceNameP);
...