SOとGoogleでかなり徹底的なサーフィンを行った後、この質問をしています.ほとんどの答えは約80%の方法で私を導きますが、それでも少し混乱するので、親切に道を教えてください.
次のように定義された Visual C++ 関数がいくつかあります。
MyDLL.h
#ifdef FUNCTIONS_EXPORTS
#define FUNCTIONS_API __declspec(dllexport)
#else
#define FUNCTIONS_API __declspec(dllimport)
#endif
namespace Functions {
class MyFunctions {
public:
static FUNCTIONS_API int Add(int a, int b);
static FUNCTIONS_API int Factorial(int a);
};
}
MyDLL.cpp
namespace Functions {
int MyFunctions::Add (int a, int b)
{
return a+b;
}
int MyFunctions::Factorial (int a)
{
if(a<0)
return -1;
else if(a==0 || a==1)
return 1;
else
return a*MyFunctions::Factorial(a-1);
}
}
ここで、このビルドによって生成された DLL を C# プログラムにインポートします。
Program.cs
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
namespace DLLTester
{
class Program
{
[DllImport("path\\to\\the\dll\\myDLL.dll")]
public static extern int Factorial(int a);
static void Main(string[] args) {
int num;
num = int.Parse(Console.ReadLine());
Console.WriteLine("The factorial is " + Factorial(num));
}
}
}
クラスなしで (定義中にキーワードなしで) 関数を記述しようとしましたstatic
が、それでも機能せず、エラーが発生します。
このすべてでどこが間違っているのですか?