2013-06-19 5 views
1

Это ниже исходного файла C++ DLL.Unhandled Exception: System.EntryPointNotFoundException в 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

ли [этот вопрос] (http://stackoverflow.com/questions/ 3515270/исключение для входа-не-найденное) поможет вам? – jszigeti

+0

У него просто нет имени, которое вы предполагали. Используйте dumpbin.exe/exports в своей DLL, чтобы увидеть настоящее имя. –

+0

Я пытался использовать dumpbin.exe для CalSimpleInterest.dll. Но я не видел никаких подробностей. Итак, как использовать dumpbin.exe/exports? –

ответ

0

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

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

enter image description here

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

dumpbin.exe/ЭКСПОРТ "C: \ пользователь \ х \ код \ bestcodeever \ myDllThatExportsSomeSmartThings.dll" работает для меня ...

Смежные вопросы