调用可导出函数列表中的另一个函数

use*_*105 5 c# dll dllexport

我编写了一个库,其中包含一些正在导出的函数.一个例子:

[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 2Test 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)

我没有测试过这个。