C#: используйте отрицательные числа символов в импортированной DLL C.C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 C#: используйте отрицательные числа символов в импортированной DLL C.

Сообщение Anonymous »

Я импортировал DLL, скомпилированную с помощью Rato.hpp:

Код: Выделить всё

#ifndef RATO_H
#define RATO_H

extern "C"
{
__declspec(dllexport) void mouse_move(char button, char x, char y, char wheel);
}
#endif
и rato.cpp:

Код: Выделить всё

typedef struct {
char button;
char x;
char y;
char wheel;
char unk1;
} MOUSE_IO;

void mouse_move(char button, char x, char y, char wheel)
{
MOUSE_IO io;
io.unk1 = 0;
io.button = button;
io.x = x;
io.y = y;
io.wheel = wheel;

if (!callmouse(&io)) {
mouse_close();
mouse_open();
}
}
При импорте в код CSharp я не могу привести отрицательные значения:

Код: Выделить всё

[DllImport("Rato.dll")]
public static extern void mouse_move(char button, char x, char y, char wheel);

mouse_move((char)0,(char)0,(char)-150,0);
Я пытался преобразовать, но это не работает, он продолжает отправлять положительные значения вместо отрицательных.
EDIT: пытался преобразовать в сбайт, но получил ошибку

System.OverflowException: «Значение было слишком большим или слишком маленьким для знакового байта».

Код: Выделить всё

[DllImport("Rato.dll")]
public static extern void mouse_move(sbyte button, sbyte x, sbyte y, sbyte wheel);

mouse_move(0,0,Convert.ToSByte(-150),0);
Как успешно передать отрицательное значение символа в импортированную C DLL?

Подробнее здесь: https://stackoverflow.com/questions/726 ... ported-dll
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»