2013-02-28 63 views
2

從我創建的引用dll中調用方法時,我在AX 2009中的自定義項目中收到消息。該消息是錯誤執行代碼對象未初始化。我有我的項目編譯成功,並在AOT中引用dll。在MyClassExecuteCopy.copy發生在AX 2009中執行代碼對象時未執行初始化時出錯

錯誤()試圖執行hostServices.Copy時()

任何人都可以看到任何問題,爲什麼我會收到這個消息?

我縮短的代碼這個例子如下:

//classDeclaration 
class MyClassExecute extends RunbaseBatch 
{ 
    MyDll.Win.HostServices     hostServices; 
    MyDll.Data.InputParameters    inputParams; 
    MyDll.Test.Data.ResultSummary   resultSummary; 
} 

//MyClassExecute.initLiabraries 
public void initLiabraries() 
{ 
    ; 
    new InteropPermission(InteropKind::ClrInterop).assert(); 

    hostServices = new MyDll.Win.HostServices(); 
    inputParams = new MyDll.Data.InputParameters(); 

    CodeAccessPermission::revertAssert(); 
} 

//////////////////////////////////////////// 

class MyClassExecuteCopy extends MyClassExecute 
{ 
} 

//MyClassExecuteCopy.copy - Exception occurs on resultSummary line with "Error executing code: copySomething  object not initialized" 
void copy() 
{ 
    new InteropPermission(InteropKind::ClrInterop).assert(); 

    //Exception occurs when executing line below with "Error executing code: copySomething object not initialized" 
    resultSummary = hostServices.Copy(); 

    CodeAccessPermission::revertAssert(); 
} 

////////////////////////////////////////////// 

class CreateCopy extends Runbase 
{ 
} 

//CreateCopy.copySomething 
public client server static void copySomething() 
{ 
    MyClassExecuteCopy   myClassExecuteCopy; 
    ; 
    new InteropPermission(InteropKind::ClrInterop).assert(); 
    myClassExecuteCopy.initLiabraries(); 
    myClassExecuteCopy.copy(); 
    CodeAccessPermission::revertAssert(); 
} 
+0

在引用的DLL中,你能跟蹤copySomething對象嗎?我的第一個直覺是,你需要調用MyDll.Win.HostServices中的其他一些功能來使Copy()正常工作,類似於你需要在AX中調用initLiabraries。 – kingofzeal 2013-02-28 16:48:50

+0

我被要求研究這個問題,沒有訪問'複製'內的代碼,但我追溯了過程中使用的數據,發現它是無效的,導致複製到錯誤或不返回任何內容。感謝您的迴應。 – Brendan 2013-02-28 19:17:59

回答

1

實測值由數據被初始化的問題。

因此,hostServices.Copy()沒有正確的值,並導致dll內的錯誤或返回任何一種方式是我在AX內收到的錯誤消息的結果。

糾正了與預期相同的呼叫處理的數據後。