Вызов нативной функции из dll
От: Аноним  
Дата: 24.01.14 13:18
Оценка:
Нативные структуры
typedef struct tB {
    int B1;
    int B2;
} sB;

typedef struct tA {
    int A1
    const char* str1;
    sB* B1;
} sA;

extern "C" __declspec(dllexport) void on1(const sA* a);


Вопрос, как вызвать on1 и передать корректную sB?
Я так понимаю, что загвоздка в том, что она передается по ссылке.
Если я ее убираю то все нормально, а сней, вылетает исключение, что нарушена память.

public struct sB
{
    public Int32 B1;
    public int32 B1;
}
public struct sA
{
    public Int32 A1
    public String str1;
    public sB B1;
}

[DllImport("MyDLL.dll", EntryPoint = "on1", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public extern static void on1(ref sA a);
Re: Вызов нативной функции из dll
От: Abyx Россия  
Дата: 24.01.14 13:26
Оценка:
Здравствуйте, Аноним, Вы писали:

сделайте сначала с IntPtr
In Zen We Trust
Re: Вызов нативной функции из dll
От: hardcase Пират http://nemerle.org
Дата: 24.01.14 13:51
Оценка:
Здравствуйте, Аноним, Вы писали:

Включить unsafe и написать:

public unsafe struct sA
{
    public Int32 A1
    public String str1;
    public sB* B1;
}
/* иЗвиНите зА неРовнЫй поЧерК */
Re: Вызов нативной функции из dll
От: hardcase Пират http://nemerle.org
Дата: 24.01.14 13:52
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Нативные структуры

А>
А>typedef struct tB {
А>    int B1;
А>    int B2;
А>} sB;
А>


Кстати, эти int-ы скольки разрядные?
/* иЗвиНите зА неРовнЫй поЧерК */
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.