2013-02-28 58 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内收到的错误消息的结果。

纠正了与预期相同的呼叫处理的数据后。