мой вопрос ясен из темы, мне нужно отправить строку из C# в C++ функцию и наоборот (терминология может быть неправильной, я - noob), поэтому я смотрел это учебник: https://www.youtube.com/watch?v=hwmRtnJag4A&index=1&list=LLTUeeaXdALOpRBhDbqiFWlQ .Howewer я не мог заставить его работать, после запуска отладчика в C# я получил эту ошибку:как связать C++ dll с C# visual studio 2015
Управляемый DEBUGGING Помощника «PInvokeStackImbalance» обнаружил проблему в «C: \ Users \ Виктор \ Documents \ Visual Studio 2015 \ Projects \ DLL_test \ DLL_test \ Bin \ x86 \ Debug \ DLL_test.vshost.exe».
вот мой код: main.cpp
#include"Header.h"
#include<iostream>
void main()
{
myClass sumTwoClass(10, 5);
double result = sumTwoClass.sumX_Y();
}
body.cpp
myClass::myClass(double var_x, double var_y)
{
x = var_x;
y = var_y;
}
double myClass::sumX_Y()
{
return x + y;
}
header.h
#pragma once
class myClass
{
public:
myClass(double var_x, double var_y);
double sumX_Y();
private:
double x;
double y;
};
CppClassDll main.cpp
#include"C:\\Users\\Viktor\\Documents\\Visual Studio 2015\\Projects\\MyClassCpp\\MyClassCpp\\Header.h"
#include"C:\\Users\\Viktor\\Documents\\Visual Studio 2015\\Projects\\MyClassCpp\\MyClassCpp\\body.cpp"
extern "C" __declspec(dllexport) double sumTwo(double var_x, double var_y)
{
myClass MC(var_x, var_y);
return MC.sumX_Y();
}
Dll_test Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
namespace DLL_test
{
class Program
{
[DllImport("C:\\Users\\Viktor\\Documents\\Visual Studio 2015\\Projects\\CppClassDll\\Debug\\CppClassDll.dll")]
public static extern double sumTwo(double var_x, double var_y);
static void Main(string[] args)
{
double var_x = 5;
double var_y = 30;
double result = sumTwo(var_x,var_y);
Console.WriteLine(result);
Console.ReadLine();
}
}
}
Теперь самое интересное заключается в том, что, когда я запускаю это я должен получить результат (35) в консоли, но получил ошибку я описанной выше ... Однако сегодня я побежал код (ничего не изменил), и консоль появилась со значением 35, я был как? Я попытался снова запустить программу и получил ту же ошибку. Я проклят или что?
При отладке я получил 0 ошибок, отладчик установлен на x86.
Хорошо, так потому, что я получил, что правильное значение, что я продолжил отладку после скинул ошибку. Затем он работает так, как предполагалось. Поэтому, когда я запускаю отладчик, он выдает ошибку, я отменяю ее, тогда все работает отлично ... Я думаю, что что-то произойдет с DllImport –