Необработанное исключение: System.EntryPointNotFoundException в DLL

Это ниже 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. Теперь я хочу использовать функцию CalSimplInterest () в C #.

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 #, пожалуйста, помогите мне решить эту проблему.
Заранее спасибо.

1

Решение

Я не уверен, но мне интересно, если вы пытаетесь экспортировать метод класса. Просто попробуйте написать свой метод в файле кода c или c ++ и экспортировать его в файл заголовка. Тогда попробуйте еще раз. Это просто попытка …

Кроме того, вы можете проверить параметры компилятора в C / C ++ -> Advanced -> Calling Convention. Убедитесь, что опция __cdecl (/ Gd). Если это __fastcall или __stdcall, WINAPI или что-то еще, вы должны использовать это соглашение о вызовах или переключить его на __cdecl (/ Gd).

введите описание изображения здесь

Вы можете использовать Dumpbin, как описано, или такой инструмент, как DependencyWalker / зависимость.exe с графическим интерфейсом пользователя.

Dumpbin.exe / EXPORTS «c: \ user \ x \ code \ bestcodeever \ myDllThatExportsSomeSmartThings.dll» работает для меня …

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector