2014-09-26 3 views
5

내보낼 일부 함수가있는 라이브러리를 작성했습니다. 예 : 내보낼 수있는 함수 목록에있는 다른 함수 호출

[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 2Test 3이 표시됩니다.

내 내에서 내 보낸 다른 함수를 호출 할 수없는 이유는 무엇입니까? 내가 할 수있는 방법이 있니?

편집 1 : 다른 비 내보낼 기능 Test_Local()를 만든 Test에서 모든 코드를 이동 :

이 시점에서 내가 내가 다음을 수행하여 필요한 것을 얻을 수 있습니다. 이제 대신 TestTwo에서 Test()를 호출 내가 Test_Local()를 호출 기능 TestTest_Local() 시도는 다른 내보낼 수있는 기능을 실행할 때까지 Test_Local();

모든 확인을 실행 호출합니다.

다른 내보내기 가능한 함수 내에서 내보내기 가능한 함수를 호출하는 것이 좋지 않으며 내보낼 수없는 함수의 레이어가 몇 개가 있는지는 중요하지 않습니다.

+0

질문에 직접 대답했다고 생각합니다. 내보낼 수있는 메서드를 별도의 클래스로 래핑하고 각각의 코드 한 줄만 넣는 것이 좋습니다. 이 행은 "실제"집행 코드에 대한 호출입니다. 이 방법은 항상 어떤 메소드가 "노출"되어 있는지와 일반 코드 내에서 내보낼 수있는 메소드를 호출하지 않는다는 것을 명확히합니다. – rocky

답변

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"); 
} 

테스트하지 않았습니다.