1

これは、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# に慣れていないので、この問題を解決するのを手伝ってください。前もって感謝します。

4

1 に答える 1

0

よくわかりませんが、クラスメソッドをエクスポートしようとしているのだろうか。メソッドをacまたはc++コードファイルに記述し、ヘッダーファイルにエクスポートしてみてください。その後、もう一度試してください。あくまでもお試しです...

さらに、C/C++ -> Advanced -> Calling Convention でコンパイラ オプションを確認できます。オプションが __cdecl (/Gd) であることを確認します。__fastcall または __stdcall、WINAPI などの場合は、この呼び出し規約を使用するか、__cdecl (/Gd) に切り替える必要があります。

ここに画像の説明を入力

説明されているように Dumpbin を使用するか、グラフィカル ユーザー インターフェイスを備えた DependencyWalker/depends.exe のようなツールを使用できます。

Dumpbin.exe /EXPORTS "c:\user\x\code\bestcodeever\myDllThatExportsSomeSmartThings.dll" は私にとってはうまくいきます...

于 2016-07-09T09:25:13.017 に答える