0
因此,有我的C代碼:調用C#方法
__declspec(dllexport) int ExecuteC(int number, int (*f)(int)) {
return f(number);
}
它編譯成 'Zad3DLL.dll' 文件。
有我的C#代碼:
class Program
{
static int IsPrimeCs(int n)
{
for(int i = 2; i < n; i++)
{
if (n % i == 0) return 0;
}
return 1;
}
[UnmanagedFunctionPointer(CallingConvention.StdCall)]
public delegate int FDelegate(int n);
[DllImport("Zad3DLL.dll", EntryPoint = "ExecuteC")]
static extern int ExecuteC(int n, FDelegate fd);
static void Main(string[] args)
{
string s;
FDelegate fd = new FDelegate(IsPrimeCs);
while ((s = Console.ReadLine()) != null)
{
int i = Int32.Parse(s);
int res = ExecuteC(i, fd);
Console.WriteLine(res == 0 ? "Nie" : "Tak");
}
}
}
問題是,當C#程序的執行來點,當它被調用函數ExecuteC它只是執行結束後沒有任何錯誤。我只是在Visual Studio的Output窗口中獲得zad3.vshost.exe' has exited with code 1073741855
。我究竟做錯了什麼?
BTW不要告訴我,我可以搜索質數更efficently,它只是示例代碼:P
向您的代碼添加異常處理程序。在終止程序的ExecuteC()方法中發生異常。由於main()中沒有異常處理函數,所以在調用main之前,Net Library添加到項目中的默認異常處理函數是處理異常並退出。當託管代碼發生異常時,編譯器會插入代碼來搜索執行堆棧並查找第一個異常處理程序。如果在方法中找不到異常處理程序,那麼在您的情況下WriteLine()函數會跳過父代方法。 – jdweng
標題是否與預期相反?我認爲你正試圖從C#中調用C方法。 –
@MathuSumMut好吧,它很複雜。我試圖調用C函數調用C#方法:P – Octothorp