Refereanced COM Object Versus Dynamic Load Of COM Object

Tech-Archive recommends: Fix windows errors by optimizing your registry



Hello,

I have a COM object and I am trying to convert to early binding code to late binding code

How can I convert the half of my codes, any idea pls

Why I am trying to do this is I dont want to register my COM for all the client installation, when referencing, my application is searching for COM Object (as u know :) )

Thanks for all

PART I ( My Normal Code to be converted )

//
private void SaveOrderToAccounting()
{
MYCOMOBJ.MYCOMOBJApplication ComApp = new MYCOMOBJ.MYCOMOBJApplication(); // Com Object Instance Created

if (ComApp.Login("UserName", "UserPass", "DesiredFirmCode")) // Logged In By Using Com Object Login Method
{
MYCOMOBJ.MYData MyOrder = ComApp.NewDataObject(MYCOMOBJ.DataObjectType.doSalesOrderSlip); // MyData is a Type In COM Object, Order Header

MyOrder.New(); // New Order Created

MyOrder.DataFields.FieldByName("NUMBER").Value = "9999"; // Set Header Field
MyOrder.DataFields.FieldByName("TOTAL").Value = "90000"; // Set Header Field

MYCOMOBJ.MyLines MyOrderLines = MyOrder.DataFields.FieldByName("TRANSACTIONS").Lines; // MyLines is a Type In COM Object, Order Lines

MyOrderLines.AppendLine(); // Insert Order Line

MyOrderLines[0].FieldByName("TYPE").Value = 0; // Set Line Field
MyOrderLines[0].FieldByName("LINECODE").Value = "STOCKCODE1"; // Set Line Field

MyOrderLines.AppendLine(); // Insert Order Line

MyOrderLines[1].FieldByName("TYPE").Value = 0; // Set Line Field
MyOrderLines[1].FieldByName("LINECODE").Value = "STOCKCODE2"; // Set Line Field

MyOrder.Post(); // New Order Posted

}
else MessageBox.Show(ComApp.GetLastError().ToString()); // Catch Error Why Cannot Connect
}

//

PART II ( My Half Converted Code )

//

private void SaveOrderToAccounting_DynamicLoad()
{
System.Type oType = System.Type.GetTypeFromProgID("MYCOMOBJ.MYCOMOBJApplication");

object o = System.Activator.CreateInstance(oType);

try
{
bool Logged = Convert.ToBoolean(oType.InvokeMember("Login", System.Reflection.BindingFlags.InvokeMethod, null, o, new object[] { "UserName", "UserPass", "DesiredFirmCode" }));

if (Logged)
{
/// UnSuccessfull Part Start
/// How Can I Convert Below Lines ?
/// My NewDataObject methow must return MyOrder

MYCOMOBJ.MYData MyOrder = ComApp.NewDataObject(MYCOMOBJ.DataObjectType.doSalesOrderSlip); // MyData is a Type In COM Object, Order Header

MyOrder.New(); // New Order Created

MyOrder.DataFields.FieldByName("NUMBER").Value = "9999"; // Set Header Field
MyOrder.DataFields.FieldByName("TOTAL").Value = "90000"; // Set Header Field

MYCOMOBJ.MyLines MyOrderLines = MyOrder.DataFields.FieldByName("TRANSACTIONS").Lines; // MyLines is a Type In COM Object, Order Lines

MyOrderLines.AppendLine(); // Insert Order Line

MyOrderLines[0].FieldByName("TYPE").Value = 0; // Set Line Field
MyOrderLines[0].FieldByName("LINECODE").Value = "STOCKCODE1"; // Set Line Field

MyOrderLines.AppendLine(); // Insert Order Line

MyOrderLines[1].FieldByName("TYPE").Value = 0; // Set Line Field
MyOrderLines[1].FieldByName("LINECODE").Value = "STOCKCODE2"; // Set Line Field

MyOrder.Post(); // New Order Posted

/// UnSuccessfull Part End
///
///
}
else
{
string ErrCode = Convert.ToString(oType.InvokeMember("GetLastError", System.Reflection.BindingFlags.InvokeMethod, null, o, null));

MessageBox.Show(ErrCode);
}
}
}


//




.



Relevant Pages