Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / C# vs pinvoke / 2 сообщений из 2, страница 1 из 1
02.02.2017, 16:02
    #39397378
vadipok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# vs pinvoke
Добрый день, коллеги!

Как всегда нужна ваша помощь.

C++
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
#include "C:\Users\vvf6426\Documents\testDLL\header.h"
#include "C:\Users\vvf6426\Documents\testDLL\body.cpp"
#include <comutil.h>
#include <queue>

using namespace std;


extern "C" __declspec(dllexport) double sumTwo(double var_x, double var_y)
{
	myClass MC(var_x, var_y);
	return MC.sumX_Y();
}

extern "C" _declspec(dllexport) BSTR getNskv()
{
    return ::SysAllocString(L"Greetings from the native world!");
}

typedef struct
{
	int   id;
	char* name;
	int   age;
	int   sex;
} PERSON;

std::queue<PERSON> result;

int i;
int main() {
	while ( i<= 3 ) {
		PERSON person;
		person.id = i;
		person.age = i*i;
		person.sex = 1;
		person.name = "Ivan";
		result.push(person);
		++i;
	}
}



C#
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
namespace MvcCppDLL.Models
{
    public class GetDataCppDLL
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int X { get; set; }
        public int Y { get; set; }
        public string b { get; set; }

        [DllImport(@"C:\Musor\CppClassDll\Release\CppClassDll.dll", CallingConvention = CallingConvention.Cdecl)] // устанавливаем название используемой библиотеки
        public static extern double sumTwo(double var_x, double var_y);
        

        [DllImport(@"C:\Musor\CppClassDll\Release\CppClassDll.dll", CallingConvention = CallingConvention.Cdecl)]
        [return: MarshalAs(UnmanagedType.BStr)]
        private static extern string getNskv();

        public double getSumm()
        {
            double summ = 0;
            summ = sumTwo(X,Y);
            return summ;
        }

        public string getByte()
        {
            b = getNskv();
            return b;
        }
    }
}



Числовое и строковое значение получил, а вот на queue застрял, чет никак не соображу.
Помогите пожалуйста вытащить result из DLL.
Спасибо большое!
...
Рейтинг: 0 / 0
03.02.2017, 14:00
    #39398159
vadipok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# vs pinvoke
Решение подсказали тут .
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / C# vs pinvoke / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]