Я пытаюсь передать параметр короткого типа в неуправляемую функцию C ++, импортированную из DLL. В моем C ++ DLL-коде у меня есть следующая функция:
__declspec(dllexport)void ChangeIcon(char *executableFile, char *iconFile,
UINT16 imageCount)
{
// Some code, doesn't matter
}
В C # управляемом коде я импортирую эту функцию со следующим кодом:
[DllImport("IconChanger.dll")]
static extern void ChangeIcon(string executableFile, string iconFile,
ushort imageCount);
А потом я называю это:
ushort imageCount = 2;
ChangeIcon("filePath", "iconPath", imageCount);
Приложение выполняет функцию просто отлично; однако появляется сообщение со следующим текстом:
Помощник по управляемой отладке «PInvokeStackImbalance» обнаружил проблему в «foo.exe».
Дополнительная информация: вызов функции PInvoke 'bar.IconChanger :: ChangeIcon' разбалансирует стек. Это вероятно потому, что управляемая подпись PInvoke не совпадает с неуправляемой целевой подписью. Убедитесь, что соглашение о вызовах и параметры подписи PInvoke соответствуют целевой неуправляемой подписи.
Если я не передам последний параметр, сообщение не появится, поэтому оно должно быть из-за передачи короткого типа. Я тоже пытался с int, появляется то же сообщение.
Очевидно, что я делаю что-то не так при передаче этого числового параметра. Как сопоставить параметры между двумя?