dotnetPublish -r win-x64 -c Release
из управляемого класса C# (Отладка – любой процессор).
Я получаю сообщение об ошибке ниже —
System.AccessViolationException: 'Попытка чтения или записи защищенного Память. Часто это указывает на то, что другая память повреждена».
Ниже приведен мой код –
Native Lib –
Код: Выделить всё
`using System;
using System.Data;
using System.Runtime.InteropServices;
public class NativeExports
{
[UnmanagedCallersOnly(EntryPoint = "multiply")]
public static IntPtr multiply(int a, int b)
{
DataTable table = new DataTable();
IntPtr ptr;
try
{
table.Columns.Add("Value");
table.Rows.Add(a*b);
GCHandle gch = GCHandle.Alloc(table);
ptr = GCHandle.ToIntPtr(gch);
return ptr;
}
catch
{
// TODO this function has no way to propagate errors
table.Rows.Add(-1);
GCHandle gch = GCHandle.Alloc(table);
ptr = GCHandle.ToIntPtr(gch);
return ptr;
}
}
}
Вызов C# -
`...
Код: Выделить всё
using System;
using System.Data;
using System.IO;
using System.Reflection.Metadata;
using System.Runtime.InteropServices;
static class MulCsPinvoke
{
[DllImport("mul")]
static extern IntPtr multiply(int a, int b);
public static void Main()
{
DataTable table = new DataTable();
var c = multiply(7, 6);
GCHandle gch = GCHandle.FromIntPtr(c);
Object tw = gch.Target;
//error at below line , unable to read tw
table = (DataTable)tw;
Marshal.FreeHGlobal(c);
}
}
Я ожидал возврата указателя памяти. И, используя цель GCHandle, я пытаюсь вернуть память в DataTable.
Заранее спасибо!
Подробнее здесь: https://stackoverflow.com/questions/784 ... en-an-indi