- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我尝试绑定(bind)一个简单的 c++ dll,如 http://msdn.microsoft.com/en-us/library/ms235636.aspx 所示。在我的 c# 控制台应用程序中,但我在运行时在 dll 中添加了一个 EntryPointNotFoundException。我的测试类是
namespace BindingCppDllExample
{
public class BindingDllClass
{
[DllImport("MathFuncsDll.dll")]
public static extern double Add(double a, double b);
}
public class Program
{
public static void Main(string[] args)
{
double a = 2.3;
double b = 3.8;
double c = BindingDllClass.Add(a, b);
Console.WriteLine(string.Format("{0} + {1} = {2}", a, b, c));
}
}
}
哪里不对?
最佳答案
您可以尝试在类外部声明函数,并使用 extern "C"
导出它们:
标题:
// MathFuncsDll.h
namespace MathFuncs
{
// Returns a + b
extern "C" __declspec(dllexport) double Add(double a, double b);
// Returns a - b
extern "C" __declspec(dllexport) double Subtract(double a, double b);
// Returns a * b
extern "C" __declspec(dllexport) double Multiply(double a, double b);
// Returns a / b
// Throws DivideByZeroException if b is 0
extern "C" __declspec(dllexport) double Divide(double a, double b);
}
实现:
// MyMathFuncs.cpp
#include "MathFuncsDll.h"
#include <stdexcept>
using namespace std;
namespace MathFuncs
{
double Add(double a, double b)
{
return a + b;
}
double Subtract(double a, double b)
{
return a - b;
}
double Multiply(double a, double b)
{
return a * b;
}
double Divide(double a, double b)
{
if (b == 0)
{
throw new invalid_argument("b cannot be zero!");
}
return a / b;
}
}
调用代码:
namespace BindingCppDllExample
{
public class BindingDllClass
{
[DllImport("MathFuncsDll.dll")]
public static extern double Add(double a, double b);
}
public class Program
{
public static void Main(string[] args)
{
double a = 2.3;
double b = 3.8;
double c = BindingDllClass.Add(a, b);
Console.WriteLine(string.Format("{0} + {1} = {2}", a, b, c));
}
}
}
关于c# - 在 C# 中绑定(bind) C++ dll 时出现 EntryPointNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12892271/
我正在尝试将外部 C++ 方法导入到我的 C# 代码中。 我修改了用于访问内存的 Windows 驱动程序。为了调用驱动程序,我使用的是 C++ 接口(interface)。最后,为了调用将我连接到驱
我在 Visual Studio 2010 中创建了一个控制台应用程序,并为 OWIN 安装了 nuget 包,例如 Microsoft.Owin.Hosting 和 Microsoft.Owin.H
我正在尝试访问 Kubuntu Linux 上某些 user32 函数的 Wine 实现。我安装了 Wine 1.1.31 包。当尝试在 MonoDevelop 中运行这个简单的测试程序时,我得到一个
我正在尝试使用我的 MonoTouch 应用程序访问的一些 native 代码函数制作一个 DLL。我遵循了 monotouch-bindings 使用的一般方法,您可以在其中: 制作一个 xcode
我使用 monotouch 将一些 C# 代码嵌入到 iPhone Objective-C 应用程序中。我能够调用 C# 代码并获取返回值,但无法使用 PInvoke 从 C# 代码调用 C 函数。我
尝试从 EF 模型生成数据库时遇到奇怪的错误。我已经能够在一个简单的场景中重现这一点。我创建了一个新项目、一个新的实体数据模型、一个仅以 Id 作为键的新实体。然后我选择从模型生成数据库,选择我的数据
尝试用我的 C# 代码实现 JS 库。非常简单,但我收到此错误: EntryPointNotFoundException: Test TalkDB.Start () (at Assets/Script
我的网站在 Visual Studio 中运行良好,但一旦将其部署到 IIS,就会出现以下错误。 Entry point was not found. Description: An unhand
这是下面的 C++ DLL 源文件。 //SimpleInterest.CPP #include using namespace std; #include "CalSimpleInterest.h
我在 Windows 7 笔记本电脑上运行 Visual Studio 2015,每次在 IDE 的调试器中启动应用程序时,都会出现以下异常: Unable to find an entry poin
我在 Windows 7 x64 SP1 上的 Visual Studio 2013 Update 5 中开发 WPF 应用程序。启动程序后,通过 http 下载 xml 文件并解析它。直到今天一切正
我创建了一个项目,我在其中输入了一个词并使用 Hunspell.dll 类来检查拼写。请注意,我通过 xamarin studio IDE(适用于 MAC)从一个包中下载了这个 dll。我还下载了类检
我得到了一个 C++ dll 文件、一个 lib 文件和一个头文件。我需要从我的 C# 应用程序调用它们。 头文件是这样的: class Clog ; class EXPORT_MACRO NB_DP
我正在使用 mono 和 xamarin 作为 IDE 在 mac 上运行一个 c# 应用程序。在我的主要方法中,我有: [DllImport("kernel32.dll", CharSet = Ch
我终于有了一个完整的 C++ DLL,但我无法从 C# 调用它。肯定是找到了 DLL,因为当我将它从文件夹中删除时,我得到了一个不同的异常,“DLLNotFoundException”。完整的错误描述
我正在尝试运行由 yo aspnet 创建的未修改的 Web Api 应用程序。 我收到此错误: System.EntryPointNotFoundException: uv_loop_size
当使用 64 位程序时,System.Data.SQLite 抛出以下 EntryPointNotFoundException: Unable to find an entry point named
这个问题在这里已经有了答案: Entry Point Not Found Exception (2 个答案) 关闭 3 年前。 我正在尝试在我的 C# (Unity) 项目中使用一些外部 C++ 代
为什么我在这段代码中有一个 EntryPointNotFoundException。 (来源 pinvoke.net)我的操作系统是 Windows XP SP3。 using System; usi
我是 C#、MonoMac 和 Xamarin 的新手,我正在尝试使用 C# 和 Xamarin.Mac 使用 this awesome example 播放一些生成的音频。 . 不幸的是第一行: A
我是一名优秀的程序员,十分优秀!