2016-03-29 4 views
0

мой вопрос ясен из темы, мне нужно отправить строку из 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.

+0

Хорошо, так потому, что я получил, что правильное значение, что я продолжил отладку после скинул ошибку. Затем он работает так, как предполагалось. Поэтому, когда я запускаю отладчик, он выдает ошибку, я отменяю ее, тогда все работает отлично ... Я думаю, что что-то произойдет с DllImport –

ответ

0
  • правой кнопкой мыши на проекте и выберите свойства

    • переключитесь на вкладку сборки

      зависимости от того, выбран для платформы?

+0

Выбранная платформа - x86, если я ее сменил на любую, что она делает то же самое. Существует столбец, который не прерывается при возникновении этой ошибки, поэтому теперь он работает без ошибок. Не знаю, является ли это постоянным исправлением или просто временным. Я прочитал что-то об этом здесь: http://stackoverflow.com/questions/3506796/pinvokestackimbalance-how-can-i-fix-this-or-turn-it-off –

Смежные вопросы