2016-03-29 35 views
0

ile ilgili sorum, konudan açıkça anlaşılacağı gibi, C# dan C++ işlevine bir dize göndermem gerekiyor ve bunun tersi (terminoloji doğru bir noob'dur) öğretici: https://www.youtube.com/watch?v=hwmRtnJag4A&index=1&list=LLTUeeaXdALOpRBhDbqiFWlQ .Howewer ben bu hata var o C# ayıklayıcısını çalıştırdıktan sonra, çalışma alamadım:C++ dll C# visual studio 2015

hata ayıklama Yardımcısı 'PInvokeStackImbalance' c' bir sorun algıladı Yönetilen: Users \ Viktor \ Belgeler 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

: burada

benim kodudur

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(); 
     } 
    } 
} 

Şimdi ilginç bir şey ben bu çalıştırdığınızda i ran ancak bugün ... konsolda sonucu (35) almak ama yukarıda açıklanan hata var gerektiğidir kod (hiçbir şey değiştirilmedi) ve konsol 35 değeriyle ortaya çıktı, ben neye benziyordum? Programı tekrar çalıştırmayı denedim ve aynı hatayı aldım. Lanetli miyim ya da ne?

Hata ayıklamada 0 hatam var, hata ayıklayıcı x86'ya ayarlı.

+0

Tamam ben doğru değeri hatayı attı sonra ben hata ayıklama devam ettiğini olduğuna aldık nedenle böylece. Sonra olması gerektiği gibi çalışır. Bu yüzden hata ayıklayıcısını çalıştırdığımda, hata atar, iptal edersem her şey iyi çalışır ... DllImport –

cevap

0
  • Sağ proje seçin ve özellikleri platformu için seçilir hangisi yapı sekmesi

    için

    • Anahtarı tıklayın?

+0

ile bir şey olacağını düşünüyorum Eğer seçilen herhangi bir şekilde değiştirirseniz seçilen platform x86 olur. Bu hata oluştuğunda kırılmayacak bir sütun var, şimdi hatasız çalışıyor. Bunun kalıcı bir düzeltme mi yoksa sadece geçici mi olduğunu bilmiyorum. Burada bir şeyler okudum: http://stackoverflow.com/questions/3506796/pinvokestackimbalance-how-can-i-fix-this-or-turn-it-off –

İlgili konular