473,779 Members | 1,912 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

Load and unload Child App Domain Assemblies

I am trying to load and unload assemblies dynamically and call methods
and properties when loaded into an Appdomain

I can load assemblies all day in the current AppDomain without
references and without interfaces if need be. But try as I may they
will ot unload. I have been working on this problem for weeks. I have
seen other apps using Remoting but I know there has got to be a way to
create a child AppDomain and reference obkect via reflection and uload
the child domain when finished.

My Scenario. I have windows services which are basically libraries
called obviously by a service wrapper. Since the wrapper does the
instansiation, I want to update these dlls without stopping and
restarting my service.

I have created a mockup using a form and a separate dll

Here is the mockup simple dll the form will call:

using System;

namespace TestClass
{
public class Test : MarshalByRefObj ect
{
public string GetResponse()
{
return "Test Response 1";
}
}
}
Here is the form code:
using System.Componen tModel;
using System.Windows. Forms;
using System.Data;
using System.Reflecti on;

namespace DomainTest
{

public class Form1 : System.Windows. Forms.Form
{
private System.Windows. Forms.Button btnLoad;
private System.Windows. Forms.Button btnUnload;
private System.Windows. Forms.Button btnCall;
private System.Windows. Forms.TextBox txtResponse;

private AppDomain _runDomain;
private Assembly _assembly;
private Type _typTest;
Object _objTest;
AppDomainSetup _appSetup;

private System.Componen tModel.Containe r components = null;

public Form1()
{
InitializeCompo nent();
_appSetup = new AppDomainSetup( );
_appSetup.Appli cationBase =
@"E:\Developmen t\.Net\CSharp\E xamples\AppDoma in\AppDomainEnv ironment";
_runDomain = AppDomain.Creat eDomain("MyDoma in", null, _appSetup);
}

protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Disp ose();
}
}
base.Dispose( disposing );
}

#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeCompo nent()
{
this.btnLoad = new System.Windows. Forms.Button();
this.btnUnload = new System.Windows. Forms.Button();
this.btnCall = new System.Windows. Forms.Button();
this.txtRespons e = new System.Windows. Forms.TextBox() ;
this.SuspendLay out();
//
// btnLoad
//
this.btnLoad.Lo cation = new System.Drawing. Point(30, 35);
this.btnLoad.Na me = "btnLoad";
this.btnLoad.Si ze = new System.Drawing. Size(70, 25);
this.btnLoad.Ta bIndex = 0;
this.btnLoad.Te xt = "Load";
this.btnLoad.Cl ick += new System.EventHan dler(this.btnLo ad_Click);
//
// btnUnload
//
this.btnUnload. Enabled = false;
this.btnUnload. Location = new System.Drawing. Point(300, 35);
this.btnUnload. Name = "btnUnload" ;
this.btnUnload. Size = new System.Drawing. Size(70, 25);
this.btnUnload. TabIndex = 1;
this.btnUnload. Text = "Unload";
this.btnUnload. Click += new System.EventHan dler(this.btnUn load_Click);
//
// btnCall
//
this.btnCall.En abled = false;
this.btnCall.Lo cation = new System.Drawing. Point(166, 35);
this.btnCall.Na me = "btnCall";
this.btnCall.Si ze = new System.Drawing. Size(70, 25);
this.btnCall.Ta bIndex = 2;
this.btnCall.Te xt = "Call";
this.btnCall.Cl ick += new System.EventHan dler(this.btnCa ll_Click);
//
// txtResponse
//
this.txtRespons e.Location = new System.Drawing. Point(30, 85);
this.txtRespons e.Name = "txtRespons e";
this.txtRespons e.Size = new System.Drawing. Size(340, 20);
this.txtRespons e.TabIndex = 3;
this.txtRespons e.Text = "";
//
// Form1
//
this.AutoScaleB aseSize = new System.Drawing. Size(5, 13);
this.ClientSize = new System.Drawing. Size(402, 441);
this.Controls.A dd(this.txtResp onse);
this.Controls.A dd(this.btnCall );
this.Controls.A dd(this.btnUnlo ad);
this.Controls.A dd(this.btnLoad );
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayo ut(false);

}
#endregion
[STAThread]
static void Main()
{
Application.Run (new Form1());
}

private void btnLoad_Click(o bject sender, System.EventArg s e)
{
_assembly = AppDomain.Curre ntDomain.Load(" TestClass");
_typTest = _assembly.GetTy pe("TestClass.T est");
_objTest = _runDomain.Crea teInstance("Tes tClass", "TestClass.Test ");
System.Diagnost ics.Debug.Write Line(_objTest.G etType());

btnCall.Enabled = _objTest != null;
btnUnload.Enabl ed = _objTest != null;
btnLoad.Enabled = _objTest == null;
}

private void btnCall_Click(o bject sender, System.EventArg s e)
{
MethodInfo method = _typTest.GetMet hod("GetRespons e");
txtResponse.Tex t = (string) method.Invoke(_ objTest, null);
}

private void btnUnload_Click (object sender, System.EventArg s e)
{
AppDomain.Unloa d(_runDomain);
btnCall.Enabled = false;
btnLoad.Enabled = true;
btnUnload.Enabl ed = false;
}
}
}
The Results:

The issue is that when calligna method off of the newly created object
I get the following error:

Object does not match target type.

I looked at the actual object type from the object created with this
line of code:

_objTest = _runDomain.Crea teInstance("Tes tClass", "TestClass.Test ");

The object is not a TestClass.Test Type object, it is a
System.Runtime. Remoting.Object Handle type object.

Soooooooooooooo oooooo....

How to get around this? Am I even close here?

Nov 17 '05 #1
2 6876
Hi Brian,

You can use the "CreateInstance AndUnwrap" method on the AppDomain, which
creates a new instance of the specified Type in the app domain. Below is
a sample:
AppDomain newAppdomain = AppDomain.Creat eDomain("NewDom ain");
AppDomainContro ller controller =
(AppDomainContr oller)newAppdom ain.CreateInsta nceAndUnwrap(
"AppDomainSampl e", "AppDomainSampl e.AppDomainCont roller");

CreateInstanceA ndUnwrap will unwrap the handle, and convert it into an
object reference, which you can then cast to the correct Type.

Another thing I noticed: If you want to make sure that you can unload
the assembly successfully, you need to make sure that you do not
reference it in your original AppDomain.

For example, you do a:
_typTest = _assembly.GetTy pe("TestClass.T est");

This will load the Type (and therefore it's assembly) in your original
AppDomain, which is probably NOT what you want.

If you use a controller class in the new AppDomain, you can go
indirectly through this controller, for example:

controller.Load ("MyTestAssembl y");
controller.Load ("MyBadAssembly ");

object result = controller.Exec uteMethod(
"MyTestAssembly ",
"MyTestAssembly .MyClass",
"Add",
new object[] { 100, 22 });

Hope this helps,

Bennie Haelen
br*********@gma il.com wrote:
I am trying to load and unload assemblies dynamically and call methods
and properties when loaded into an Appdomain

I can load assemblies all day in the current AppDomain without
references and without interfaces if need be. But try as I may they
will ot unload. I have been working on this problem for weeks. I have
seen other apps using Remoting but I know there has got to be a way to
create a child AppDomain and reference obkect via reflection and uload
the child domain when finished.

My Scenario. I have windows services which are basically libraries
called obviously by a service wrapper. Since the wrapper does the
instansiation, I want to update these dlls without stopping and
restarting my service.

I have created a mockup using a form and a separate dll

Here is the mockup simple dll the form will call:

using System;

namespace TestClass
{
public class Test : MarshalByRefObj ect
{
public string GetResponse()
{
return "Test Response 1";
}
}
}
Here is the form code:
using System.Componen tModel;
using System.Windows. Forms;
using System.Data;
using System.Reflecti on;

namespace DomainTest
{

public class Form1 : System.Windows. Forms.Form
{
private System.Windows. Forms.Button btnLoad;
private System.Windows. Forms.Button btnUnload;
private System.Windows. Forms.Button btnCall;
private System.Windows. Forms.TextBox txtResponse;

private AppDomain _runDomain;
private Assembly _assembly;
private Type _typTest;
Object _objTest;
AppDomainSetup _appSetup;

private System.Componen tModel.Containe r components = null;

public Form1()
{
InitializeCompo nent();
_appSetup = new AppDomainSetup( );
_appSetup.Appli cationBase =
@"E:\Developmen t\.Net\CSharp\E xamples\AppDoma in\AppDomainEnv ironment";
_runDomain = AppDomain.Creat eDomain("MyDoma in", null, _appSetup);
}

protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Disp ose();
}
}
base.Dispose( disposing );
}

#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeCompo nent()
{
this.btnLoad = new System.Windows. Forms.Button();
this.btnUnload = new System.Windows. Forms.Button();
this.btnCall = new System.Windows. Forms.Button();
this.txtRespons e = new System.Windows. Forms.TextBox() ;
this.SuspendLay out();
//
// btnLoad
//
this.btnLoad.Lo cation = new System.Drawing. Point(30, 35);
this.btnLoad.Na me = "btnLoad";
this.btnLoad.Si ze = new System.Drawing. Size(70, 25);
this.btnLoad.Ta bIndex = 0;
this.btnLoad.Te xt = "Load";
this.btnLoad.Cl ick += new System.EventHan dler(this.btnLo ad_Click);
//
// btnUnload
//
this.btnUnload. Enabled = false;
this.btnUnload. Location = new System.Drawing. Point(300, 35);
this.btnUnload. Name = "btnUnload" ;
this.btnUnload. Size = new System.Drawing. Size(70, 25);
this.btnUnload. TabIndex = 1;
this.btnUnload. Text = "Unload";
this.btnUnload. Click += new System.EventHan dler(this.btnUn load_Click);
//
// btnCall
//
this.btnCall.En abled = false;
this.btnCall.Lo cation = new System.Drawing. Point(166, 35);
this.btnCall.Na me = "btnCall";
this.btnCall.Si ze = new System.Drawing. Size(70, 25);
this.btnCall.Ta bIndex = 2;
this.btnCall.Te xt = "Call";
this.btnCall.Cl ick += new System.EventHan dler(this.btnCa ll_Click);
//
// txtResponse
//
this.txtRespons e.Location = new System.Drawing. Point(30, 85);
this.txtRespons e.Name = "txtRespons e";
this.txtRespons e.Size = new System.Drawing. Size(340, 20);
this.txtRespons e.TabIndex = 3;
this.txtRespons e.Text = "";
//
// Form1
//
this.AutoScaleB aseSize = new System.Drawing. Size(5, 13);
this.ClientSize = new System.Drawing. Size(402, 441);
this.Controls.A dd(this.txtResp onse);
this.Controls.A dd(this.btnCall );
this.Controls.A dd(this.btnUnlo ad);
this.Controls.A dd(this.btnLoad );
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayo ut(false);

}
#endregion
[STAThread]
static void Main()
{
Application.Run (new Form1());
}

private void btnLoad_Click(o bject sender, System.EventArg s e)
{
_assembly = AppDomain.Curre ntDomain.Load(" TestClass");
_typTest = _assembly.GetTy pe("TestClass.T est");
_objTest = _runDomain.Crea teInstance("Tes tClass", "TestClass.Test ");
System.Diagnost ics.Debug.Write Line(_objTest.G etType());

btnCall.Enabled = _objTest != null;
btnUnload.Enabl ed = _objTest != null;
btnLoad.Enabled = _objTest == null;
}

private void btnCall_Click(o bject sender, System.EventArg s e)
{
MethodInfo method = _typTest.GetMet hod("GetRespons e");
txtResponse.Tex t = (string) method.Invoke(_ objTest, null);
}

private void btnUnload_Click (object sender, System.EventArg s e)
{
AppDomain.Unloa d(_runDomain);
btnCall.Enabled = false;
btnLoad.Enabled = true;
btnUnload.Enabl ed = false;
}
}
}
The Results:

The issue is that when calligna method off of the newly created object
I get the following error:

Object does not match target type.

I looked at the actual object type from the object created with this
line of code:

_objTest = _runDomain.Crea teInstance("Tes tClass", "TestClass.Test ");

The object is not a TestClass.Test Type object, it is a
System.Runtime. Remoting.Object Handle type object.

Soooooooooooooo oooooo....

How to get around this? Am I even close here?

Nov 17 '05 #2
Hi Brian,

You can use the "CreateInstance AndUnwrap" method on the AppDomain, which
creates a new instance of the specified Type in the app domain. Below is
a sample:
AppDomain newAppdomain = AppDomain.Creat eDomain("NewDom ain");
AppDomainContro ller controller =
(AppDomainContr oller)newAppdom ain.CreateInsta nceAndUnwrap(
"AppDomainSampl e", "AppDomainSampl e.AppDomainCont roller");

CreateInstanceA ndUnwrap will unwrap the handle, and convert it into an
object reference, which you can then cast to the correct Type.

Another thing I noticed: If you want to make sure that you can unload
the assembly successfully, you need to make sure that you do not
reference it in your original AppDomain.

For example, you do a:
_typTest = _assembly.GetTy pe("TestClass.T est");

This will load the Type (and therefore it's assembly) in your original
AppDomain, which is probably NOT what you want.

If you use a controller class in the new AppDomain, you can go
indirectly through this controller, for example:

controller.Load ("MyTestAssembl y");
controller.Load ("MyBadAssembly ");

object result = controller.Exec uteMethod(
"MyTestAssembly ",
"MyTestAssembly .MyClass",
"Add",
new object[] { 100, 22 });

Hope this helps,

Bennie Haelen
br*********@gma il.com wrote:
I am trying to load and unload assemblies dynamically and call methods
and properties when loaded into an Appdomain

I can load assemblies all day in the current AppDomain without
references and without interfaces if need be. But try as I may they
will ot unload. I have been working on this problem for weeks. I have
seen other apps using Remoting but I know there has got to be a way to
create a child AppDomain and reference obkect via reflection and uload
the child domain when finished.

My Scenario. I have windows services which are basically libraries
called obviously by a service wrapper. Since the wrapper does the
instansiation, I want to update these dlls without stopping and
restarting my service.

I have created a mockup using a form and a separate dll

Here is the mockup simple dll the form will call:

using System;

namespace TestClass
{
public class Test : MarshalByRefObj ect
{
public string GetResponse()
{
return "Test Response 1";
}
}
}
Here is the form code:
using System.Componen tModel;
using System.Windows. Forms;
using System.Data;
using System.Reflecti on;

namespace DomainTest
{

public class Form1 : System.Windows. Forms.Form
{
private System.Windows. Forms.Button btnLoad;
private System.Windows. Forms.Button btnUnload;
private System.Windows. Forms.Button btnCall;
private System.Windows. Forms.TextBox txtResponse;

private AppDomain _runDomain;
private Assembly _assembly;
private Type _typTest;
Object _objTest;
AppDomainSetup _appSetup;

private System.Componen tModel.Containe r components = null;

public Form1()
{
InitializeCompo nent();
_appSetup = new AppDomainSetup( );
_appSetup.Appli cationBase =
@"E:\Developmen t\.Net\CSharp\E xamples\AppDoma in\AppDomainEnv ironment";
_runDomain = AppDomain.Creat eDomain("MyDoma in", null, _appSetup);
}

protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Disp ose();
}
}
base.Dispose( disposing );
}

#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeCompo nent()
{
this.btnLoad = new System.Windows. Forms.Button();
this.btnUnload = new System.Windows. Forms.Button();
this.btnCall = new System.Windows. Forms.Button();
this.txtRespons e = new System.Windows. Forms.TextBox() ;
this.SuspendLay out();
//
// btnLoad
//
this.btnLoad.Lo cation = new System.Drawing. Point(30, 35);
this.btnLoad.Na me = "btnLoad";
this.btnLoad.Si ze = new System.Drawing. Size(70, 25);
this.btnLoad.Ta bIndex = 0;
this.btnLoad.Te xt = "Load";
this.btnLoad.Cl ick += new System.EventHan dler(this.btnLo ad_Click);
//
// btnUnload
//
this.btnUnload. Enabled = false;
this.btnUnload. Location = new System.Drawing. Point(300, 35);
this.btnUnload. Name = "btnUnload" ;
this.btnUnload. Size = new System.Drawing. Size(70, 25);
this.btnUnload. TabIndex = 1;
this.btnUnload. Text = "Unload";
this.btnUnload. Click += new System.EventHan dler(this.btnUn load_Click);
//
// btnCall
//
this.btnCall.En abled = false;
this.btnCall.Lo cation = new System.Drawing. Point(166, 35);
this.btnCall.Na me = "btnCall";
this.btnCall.Si ze = new System.Drawing. Size(70, 25);
this.btnCall.Ta bIndex = 2;
this.btnCall.Te xt = "Call";
this.btnCall.Cl ick += new System.EventHan dler(this.btnCa ll_Click);
//
// txtResponse
//
this.txtRespons e.Location = new System.Drawing. Point(30, 85);
this.txtRespons e.Name = "txtRespons e";
this.txtRespons e.Size = new System.Drawing. Size(340, 20);
this.txtRespons e.TabIndex = 3;
this.txtRespons e.Text = "";
//
// Form1
//
this.AutoScaleB aseSize = new System.Drawing. Size(5, 13);
this.ClientSize = new System.Drawing. Size(402, 441);
this.Controls.A dd(this.txtResp onse);
this.Controls.A dd(this.btnCall );
this.Controls.A dd(this.btnUnlo ad);
this.Controls.A dd(this.btnLoad );
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayo ut(false);

}
#endregion
[STAThread]
static void Main()
{
Application.Run (new Form1());
}

private void btnLoad_Click(o bject sender, System.EventArg s e)
{
_assembly = AppDomain.Curre ntDomain.Load(" TestClass");
_typTest = _assembly.GetTy pe("TestClass.T est");
_objTest = _runDomain.Crea teInstance("Tes tClass", "TestClass.Test ");
System.Diagnost ics.Debug.Write Line(_objTest.G etType());

btnCall.Enabled = _objTest != null;
btnUnload.Enabl ed = _objTest != null;
btnLoad.Enabled = _objTest == null;
}

private void btnCall_Click(o bject sender, System.EventArg s e)
{
MethodInfo method = _typTest.GetMet hod("GetRespons e");
txtResponse.Tex t = (string) method.Invoke(_ objTest, null);
}

private void btnUnload_Click (object sender, System.EventArg s e)
{
AppDomain.Unloa d(_runDomain);
btnCall.Enabled = false;
btnLoad.Enabled = true;
btnUnload.Enabl ed = false;
}
}
}
The Results:

The issue is that when calligna method off of the newly created object
I get the following error:

Object does not match target type.

I looked at the actual object type from the object created with this
line of code:

_objTest = _runDomain.Crea teInstance("Tes tClass", "TestClass.Test ");

The object is not a TestClass.Test Type object, it is a
System.Runtime. Remoting.Object Handle type object.

Soooooooooooooo oooooo....

How to get around this? Am I even close here?

Nov 17 '05 #3

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

0
1571
by: Lloyd Sheen | last post by:
I am having trouble gettting an assembly loaded with Assembly.LoadFrom. I can get the assembly call the method I need to call. Now I want to unload the assembly. I need to do this so that the user can (thru my app) create a new version of the assembly. The app will call a predetermined method (sort of an add-in) and then exit. At this point if the output is not what the user wants , the GUI will allow the user to edit the source code...
2
8495
by: Patrick Blackman | last post by:
I have a program that search the application path for all the Dll that implement a certain interface IText ,when a Dll with the interface is found ,I run a method called IText.Format() which works very beautifully but then I would like to unload the Dll after running the ITextFormat procedure. Any ideas about doing this? I was told that it had something to do with creating a new AppDomain ... Any help would be appreciated.
2
10850
by: Lauren Hines | last post by:
Hello, I have read numerous post stating that the only way to unload an assembly (DLL in my case) is to create a separate AppDomain, load the assembly, then unload it by calling AppDomain.Unload. When trying to delete the DLL file I get an exception that access is denied. When trying to copy over the DLL file, I get an exception that it is being used by another process.
0
462
by: brianbender | last post by:
I am trying to load and unload assemblies dynamically and call methods and properties when loaded into an Appdomain I can load assemblies all day in the current AppDomain without references and without interfaces if need be. But try as I may they will ot unload. I have been working on this problem for weeks. I have seen other apps using Remoting but I know there has got to be a way to create a child AppDomain and reference obkect via...
4
6240
by: Brett Baisley | last post by:
I am used to VB6 where frmMain.unload, frmNew.load worked. What replaced this in vb.net?
2
2214
by: Artem | last post by:
When I use the method Thread.Abort, it only sends a request of aborting to OS to stop a thread. The thread itself isn't killed and allocated resources aren't released. I tried to run that thread inside of a domain, specially created for it, but the domain can't be unloaded, 'till there are some not- stopped threads. Please, tell me are there any ways to immediately stop a thread or unload a domain? Thanks beforehand!
6
4727
by: Ronald S. Cook | last post by:
We have a Windows app that has one main form (a shell, sort of). We then load user controls into a panel on the form depending on what the user has selected. Our current code to unload the existing user control and load the newly selected one is pretty bulky. Every time we add a new user control to the project, we have to add some code in the section where we are loading/unloading. Is there a more dynamic, more efficient way to...
0
952
by: =?Utf-8?B?ZGF2aWQ=?= | last post by:
hi, Can anyone plz let me know that how my user in child1.domain.com can login to the child2.domain.com. I think it is quite possible cause evry child domain is by default having two way transitive trust in between... A many thanks in advance....
0
2207
by: praveenselvam636 | last post by:
hai! how can i apply a group policy which was created for the parent domain controller users to the child domain users.i am finding difficult to apply a parent domain group policy to the child domain users.please anyone help me to solve this problem.
0
9632
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However, people are often confused as to whether an ONU can Work As a Router. In this blog post, we’ll explore What is ONU, What Is Router, ONU & Router’s main usage, and What is the difference between ONU and Router. Let’s take a closer look ! Part I. Meaning of...
0
9471
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can effortlessly switch the default language on Windows 10 without reinstalling. I'll walk you through it. First, let's disable language synchronization. With a Microsoft account, language settings sync across devices. To prevent any complications,...
0
10302
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers, it seems that the internal comparison operator "<=>" tries to promote arguments from unsigned to signed. This is as boiled down as I can make it. Here is my compilation command: g++-12 -std=c++20 -Wnarrowing bit_field.cpp Here is the code in...
0
10136
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven tapestry of website design and digital marketing. It's not merely about having a website; it's about crafting an immersive digital experience that captivates audiences and drives business growth. The Art of Business Website Design Your website is...
1
10071
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For most users, this new feature is actually very convenient. If you want to control the update process,...
0
9925
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each protocol has its own unique characteristics and advantages, but as a user who is planning to build a smart home system, I am a bit confused by the choice of these technologies. I'm particularly interested in Zigbee because I've heard it does some...
1
7478
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new presenter, Adolph Dupré who will be discussing some powerful techniques for using class modules. He will explain when you may want to use classes instead of User Defined Types (UDT). For example, to manage the data in unbound forms. Adolph will...
0
6723
by: conductexam | last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and then checking html paragraph one by one. At the time of converting from word file to html my equations which are in the word document file was convert into image. Globals.ThisAddIn.Application.ActiveDocument.Select();...
1
4036
by: 6302768590 | last post by:
Hai team i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.