我编写了一个库,其中包含一些正在导出的函数.一个例子:
[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");
}
Run Code Online (Sandbox Code Playgroud)
当我Test从外部应用程序(Delphi)调用它工作正常,我得到消息框.
当我调用时Test2,我在Delphi中获得了External异常.异常被立即抛出,它甚至没有显示消息框Test 2.当我调用Test2哪个调用TestThree哪个不是可导出的函数时,它运行正常,我得到两个,消息框Test 2和Test 3.
为什么我不能在我的DLL中调用其他导出的函数?有什么方法可以做到吗?
编辑1:
在这一点上,我可以通过执行以下操作来实现我所需要的:创建另一个不可导出的函数Test_Local(),移动所有代码Test.现在,函数也调用而不是Test()从TestTwoi调用调用Test_Local()TestTest_Local();
一切运行正常,直到Test_Local()尝试运行任何其他可导出的功能.
因此,在另一个可导出函数中调用可导出函数是不合适的,并且它们之间有多少层不可导出的函数并不重要.
小智 0
我想到的一种可能性是方法的导出名称和本地名称相同。您是否尝试过更改方法的本地名称?
[DllExport("Test", CallingConvention = CallingConvention.StdCall)]
public static void TestOne() {
MessageBox.Show("Test 1");
}
[DllExport("Test2", CallingConvention = CallingConvention.StdCall)]
public static void TestTwo() {
MessageBox.Show("Test 2");
TestOne();
//TestThree();
}
public static void TestThree() {
MessageBox.Show("Test 3");
}
Run Code Online (Sandbox Code Playgroud)
我没有测试过这个。
| 归档时间: |
|
| 查看次数: |
100 次 |
| 最近记录: |