Собственный AOT — «Попытка чтения или записи защищенной памяти. Часто это указывает на то, что другая память повреждена»C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Собственный AOT — «Попытка чтения или записи защищенной памяти. Часто это указывает на то, что другая память повреждена»

Сообщение Anonymous »

Я пытаюсь вызвать собственную библиотеку AOT, опубликованную с помощью -
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
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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