[DllImport("some.dll")]
private static extern bool someFunction(string source, ref long num, ref long num2);
public void someOtherFunction(string source)
{
long num = 0L;
long num2 = 0L;
bool flag = this.someFunction(source, ref num, ref num2);
Console.WriteLine(num);
Console.WriteLine(num2);
}
#define sizeof_var( var ) ((size_t)(&(var)+1)-(size_t)(&(var)))
extern "C" bool __declspec(dllexport) someFunction(std::string source, int num, int num2) {
std::vector<char> bytes(source.begin(), source.end());
bytes.push_back('\0');
char *c = &bytes[0];
num = (long)(&c); // здесь ошибка:
// Необработанное исключение: System.AccessViolationException: Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена.
num2 = sizeof_var(c);
return true;
}
bytes.push_back('\0');
char *c = &bytes[0];
num = (long)(&c);
не совсем понятно, что вы хотите получить? Адрес первого байта? char* c
. Затем зачем-то присваиваете переменной типа int значение типа long, что приводит к переполнению. И потом удивляетесь, почему у вас AccessViolation. bool someFunction(int64_t* num)
{
cout << num << endl;
return true;
}
num = (int64_t*)(1);
int64_t* a = (int64_t*)(1);
num = (int64_t*)(&a);
int a = 1;
num = (int64_t*)(&a);
мне надо сделать строку в byte array и адрес полученной переменной записать в переменную num
#define sizeof_var( var ) ((size_t)(&(var)+1)-(size_t)(&(var)))
extern "C" bool __declspec(dllexport) someFunction(std::string source, int64_t* num, int 64_t* num2) {
std::vector<char> bytes(source.begin(), source.end());
bytes.push_back('\0');
char* c = &bytes[0];
*num = *c; // ???
*num2 = sizeof_var(c);
return true;
}