我寫了一個庫,其中包含一些正在導出的函數。舉個例子:調用可導出函數列表中的另一個函數
[DllExport("Test", CallingConvention = CallingConvention.StdCall)]
public static void Test() {
MessageBox.Show("Test 1");
}
[DllExport("Test2", CallingConvention = CallingConvention.StdCall)]
public static void TestTwo() {
MessageBox.Show("Test 2");
Test();
//TestThree();
}
public static void TestThree() {
MessageBox.Show("Test 3");
}
當我打電話Test
從外部應用程序(德爾福)它的工作原理確定,我得到的消息框。
當我打電話給Test2
時,我在Delphi中得到了External異常。例外情況立即拋出,它甚至不顯示消息框Test 2
。 當我打電話Test2
又調用TestThree
,這是不可導出的功能,它運行正常,我得到兩個,消息框Test 2
和Test 3
。
爲什麼我不能在我的DLL中調用其他導出函數?有什麼辦法可以做到嗎?
編輯1:
在這一點上我可以實現我需要通過執行以下操作: 創建的另一個不可導出功能Test_Local()
,感動了所有的代碼從Test
。現在,而不是調用從TestTwo
Test()
我打電話Test_Local()
,功能Test
還呼籲Test_Local();
一切運行正常,直到Test_Local()
嘗試運行任何其他導出功能。
因此,在另一個可導出函數內部調用可導出函數並不重要,它們之間有多少層不可導出函數是無關緊要的。
我想你自己回答了這個問題。我只是推薦將可導出的方法封裝到一個單獨的類中,並且只將一行代碼放到每個類中。該行將是對「實際」執行代碼的調用。這樣就可以清楚地知道哪些方法「暴露」,並且永遠不會在常規代碼中調用可導出的方法。 – rocky 2014-11-23 00:27:58