내보낼 일부 함수가있는 라이브러리를 작성했습니다. 예 : 내보낼 수있는 함수 목록에있는 다른 함수 호출
[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 예외가 발생합니다. 예외가 즉시 throw됩니다. 메시지 상자가 표시되지 않습니다.
Test 2
.
Test2
을 불러올 때
TestThree
을 호출 할 수 있습니다.이 함수는 내보낼 수 없으며 ok를 실행하면 메시지 상자
Test 2
과
Test 3
이 표시됩니다.
내 내에서 내 보낸 다른 함수를 호출 할 수없는 이유는 무엇입니까? 내가 할 수있는 방법이 있니?
편집 1 : 다른 비 내보낼 기능 Test_Local()
를 만든 Test
에서 모든 코드를 이동 :
이 시점에서 내가 내가 다음을 수행하여 필요한 것을 얻을 수 있습니다. 이제 대신 TestTwo
에서 Test()
를 호출 내가 Test_Local()
를 호출 기능 Test
도 Test_Local()
시도는 다른 내보낼 수있는 기능을 실행할 때까지 Test_Local();
모든 확인을 실행 호출합니다.
다른 내보내기 가능한 함수 내에서 내보내기 가능한 함수를 호출하는 것이 좋지 않으며 내보낼 수없는 함수의 레이어가 몇 개가 있는지는 중요하지 않습니다.
질문에 직접 대답했다고 생각합니다. 내보낼 수있는 메서드를 별도의 클래스로 래핑하고 각각의 코드 한 줄만 넣는 것이 좋습니다. 이 행은 "실제"집행 코드에 대한 호출입니다. 이 방법은 항상 어떤 메소드가 "노출"되어 있는지와 일반 코드 내에서 내보낼 수있는 메소드를 호출하지 않는다는 것을 명확히합니다. – rocky