Fw: Referenced COM Object Versus Dynamic Load Of COM Object

C

Claire

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


//
 
C

Ciaran O''Donnell

If you use Late Binding, the component will have to be registered. What you
probably want to do with Early Binding, is change the reference to Copy
Local. Right click on the COM component in the references list and click
properties. Then set the Copy Local to true. This should then copy the COM
dll and the type library to the bin file to be deployed with the app.


--
Ciaran O''Donnell
http://wannabedeveloper.spaces.live.com


Claire said:
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);
}
}
}


//
 
F

Family Tree Mike

I'm not sure I follow what the Copy Local has to do with Early Binding.
When using COM, the location is independent of the calling app.

Ciaran O''Donnell said:
If you use Late Binding, the component will have to be registered. What
you
probably want to do with Early Binding, is change the reference to Copy
Local. Right click on the COM component in the references list and click
properties. Then set the Copy Local to true. This should then copy the COM
dll and the type library to the bin file to be deployed with the app.


--
Ciaran O''Donnell
http://wannabedeveloper.spaces.live.com


Claire said:
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);
}
}
}


//
 
Top