gpt4 book ai didi

c# - DLL 中未处理的异常 : System. EntryPointNotFoundException

转载 作者:太空宇宙 更新时间:2023-11-04 14:05:25 24 4
gpt4 key购买 nike

这是下面的 C++ DLL 源文件。

//SimpleInterest.CPP
#include <iostream>
using namespace std;
#include "CalSimpleInterest.h"

namespace simpleInt
{
// total interest
double calculateInterest:: CalSimplInterest(double Principal, double Rate, double Time)
{
double interest = 0.0;
interest = (Principal * Time * Rate) / 100;
return interest;
}
}

类似的头文件

//CalSimpleInterest.h
namespace simpleInt
{
class calculateInterest
{
public:
static __declspec(dllexport) double CalSimplInterest(double Principal, double Rate, double Time);
};
}

我已经编译并创建了 CalSimpleInterest.dll 。现在我想在 C# 中使用 CalSimplInterest() 函数。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace ConsoleApplication1
{
class Program
{
// Set the library path
const string dllFilePath =
"C:\\Users\\ggirgup\\Documents\\Visual Studio 2012\\Projects\\CalSimpleInterest\\Debug\\CalSimpleInterest.dll";


// This is the function we import from the C++ library.
//[DllImport(dllFilePath)]
[DllImport(dllFilePath, CallingConvention = CallingConvention.Cdecl)]
public static extern double CalSimplInterest(double Principal, double Rate, double Time);

[DllImport(dllFilePath, CallingConvention = CallingConvention.Cdecl)]
public static extern double TotalPayback(double Principal, double Rate, double Time);

static void Main(string[] args)
{
Console.WriteLine(
"Call C++ function in C# ");

// Call C++ which calls C#
CalSimplInterest(1000,1,2);
// TotalPayback(1000, 1, 2);
// Stop the console until user's pressing Enter
Console.ReadLine();
}


}
}

编译成功。但它在运行时显示以下错误。

Unhandled Exception: System.EntryPointNotFoundException: Unable to find an entry  point named 'CalSimplInterest' in DLL 'C:\Users\ggirgup\Documents\Visual
Studio
2012\Projects\CalSimpleInterest\Debug\CalSimpleInterest.dll'.
at ConsoleApplication1.Program.CalSimplInterest(Double Principal, Double Rate , Double Time)
at ConsoleApplication1.Program.Main(String[] args) in c:\Users\ggirgup\Docume nts\Visual Studio 2012\Projects\CsharpCallingCPPDLL\CsharpCallingCPPDLL\Program.
cs:line 46

由于我对C#很天真,请帮我解决这个问题。提前致谢。

最佳答案

我不确定,但我想知道您是否尝试导出类方法。只需尝试在 c 或 c++ 代码文件中编写您的方法并将其导出到头文件中。然后再试一次。这只是一个尝试...

此外,您可以在 C/C++ -> Advanced -> Calling Convention 下检查编译器选项。确保选项是 __cdecl (/Gd)。如果它是 __fastcall 或 __stdcall、WINAPI 或任何您必须使用此调用约定或将其切换为 __cdecl (/Gd)。

enter image description here

您可以按照描述使用 Dumpbin 或带有图形用户界面的工具,例如 DependencyWalker/depends.exe。

Dumpbin.exe/EXPORTS "c:\user\x\code\bestcodeever\myDllThatExportsSomeSmartThings.dll"对我有用...

关于c# - DLL 中未处理的异常 : System. EntryPointNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17195376/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com