这是我第一次尝试将C#和非托管的C++混合在一起,所以这可能是一个非常简单的问题,但我不理解。
我需要在C#代码中调用一些来自C++ dll的函数。以下是dll项目的代码:
.h文件:
我需要在C#代码中调用一些来自C++ dll的函数。以下是dll项目的代码:
.h文件:
#pragma once
#include <iostream>
#if defined FIRSTDLL_EXPORTS
#define DECLDIR __declspec(dllexport)
#else
#define DECLDIR __declspec(dllimport)
#endif
extern "C"
{
DECLDIR int Add( int a, int b );
DECLDIR void Function( void );
}
.cpp文件
#include "stdafx.h"
#include "myFct.h"
#include <iostream>
extern "C"
{
DECLDIR int Add( int a, int b )
{
return( a + b );
}
DECLDIR void Function( void )
{
std::cout << "DLL Called!" << std::endl;
}
}
我为调试和发布编译了这个程序,并将其复制到我的C#项目的debug
文件夹中。但两个版本都没有起作用。
以下是C#代码:
[DllImport("firstDLL.Dll")]
public static extern int Add(int a, int b);
var cyu = Add(3, 5);
当我尝试运行时,出现以下错误:
“托管调试助手‘PInvokeStackImbalance’在‘C:\Program Files\Microsoft Office\Office14\WINWORD.EXE’中检测到问题。 附加信息:对PInvoke函数‘MyAddin!MyAddin.ThisAddIn::Add’的调用已使堆栈不平衡。这很可能是由于托管PInvoke签名与非托管目标签名不匹配。请检查PInvoke签名的调用约定和参数是否与目标非托管签名匹配。”
但是,我发现签名是相同的。我漏掉了什么?
谢谢!