473,564 Members | 2,798 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

Passing values from C# from/to a C++ dll

Hi, I have this in C++ and I like to call it from c# to get the value
but I fail. it will be good if you can give me some information. I
tried it in VB.net it works but I use almost the same way as VB in C#
but it doens't work.

c++: (csp2.dll)
NoMangle long DLL_IMPORT_EXPO RT csp2TimeStamp2S tr(unsigned char
*Stamp, char *value, long nMaxLength);


VB.net: (this works correctly)

Declare Function csp2TimeStamp2S tr Lib "csp2.dll" (ByRef Stamp As
Byte, ByVal value As String, ByVal nMaxLength As Integer) As Integer

Dim nRC As Integer
Dim arrbyteBarcode( 99) As Byte '100 elements
Dim nBytesRead As Integer
Dim bstrTmp As New VB6.FixedLength String(50)

nBytesRead = csp2GetPacket(a rrbyteBarcode(0 ), i, 100)

nRC = csp2TimeStamp2S tr(arrbyteBarco de(nBytesRead - 4), bstrTmp.Value,
Len(bstrTmp.Val ue))
TextBox1.text= VB.Left(bstrTmp .Value, 20)


C#: (this doesn't work :( )

[System.Runtime. InteropServices .DllImport("csp 2.DLL")] static extern
int csp2TimeStamp2S tr(byte value, string Stamp, int nMaxLength);

int nRC, nBytesRead;
byte[] arrbyteBarcode= new byte[100];
FixedLengthStri ng bstrTmp = new FixedLengthStri ng(50);

nBytesRead = csp2GetPacket(a rrbyteBarcode[0], i, 100);
bstrTmp=" ";

nRC = csp2TimeStamp2S tr(arrbyteBarco de[nBytesRead-4],
bstrTmp.Value, bstrTmp.Value.L ength);
TextBox1.text= bstrTmp.Value.t oString();

Oct 3 '07 #1
11 7179
"Bob Yang" <bo******@gmail .comwrote in message
news:11******** *************@d 55g2000hsg.goog legroups.com...
Hi, I have this in C++ and I like to call it from c# to get the value
but I fail. it will be good if you can give me some information. I
tried it in VB.net it works but I use almost the same way as VB in C#
but it doens't work.

c++: (csp2.dll)
NoMangle long DLL_IMPORT_EXPO RT csp2TimeStamp2S tr(unsigned char
*Stamp, char *value, long nMaxLength);


VB.net: (this works correctly)

Declare Function csp2TimeStamp2S tr Lib "csp2.dll" (ByRef Stamp As
Byte, ByVal value As String, ByVal nMaxLength As Integer) As Integer

Dim nRC As Integer
Dim arrbyteBarcode( 99) As Byte '100 elements
Dim nBytesRead As Integer
Dim bstrTmp As New VB6.FixedLength String(50)

nBytesRead = csp2GetPacket(a rrbyteBarcode(0 ), i, 100)

nRC = csp2TimeStamp2S tr(arrbyteBarco de(nBytesRead - 4), bstrTmp.Value,
Len(bstrTmp.Val ue))
TextBox1.text= VB.Left(bstrTmp .Value, 20)


C#: (this doesn't work :( )

[System.Runtime. InteropServices .DllImport("csp 2.DLL")] static extern
int csp2TimeStamp2S tr(byte value, string Stamp, int nMaxLength);

int nRC, nBytesRead;
byte[] arrbyteBarcode= new byte[100];
FixedLengthStri ng bstrTmp = new FixedLengthStri ng(50);

nBytesRead = csp2GetPacket(a rrbyteBarcode[0], i, 100);
bstrTmp=" ";

nRC = csp2TimeStamp2S tr(arrbyteBarco de[nBytesRead-4],
bstrTmp.Value, bstrTmp.Value.L ength);
TextBox1.text= bstrTmp.Value.t oString();


..... csp2TimeStamp2S tr(byte[] value, StringBuilder Stamp, int nMaxLength);

int nRC, nBytesRead;
byte[] arrbyteBarcode= new byte[100];
StringBuilder sb = new StringBuilder(" ", 100);
nBytesRead = csp2GetPacket(a rrbyteBarcode[0], i, 100);
ArraySegment<by teas = new ArraySegment<by te>(arrbyteBarc ode,
nBytesRead-4, 4); // [2]
nRC = csp2TimeStamp2S tr(as.Array, sb, sb.Length); // [3]
TextBox1.text= sb.toString();

First you have to pass a byte[] as first parameter to the function, you are
passing the first byte of the array by value. Note that the VB code is
flawed too, you should pass a byte[] not a refrence to a byte, this code
will fail on 64 bit Windows!
Second [1]get rid of the VB6 dependency and use a StringBuilder to pass a
fixed string buffer. Not sure why you are passing a " " char when calling
this function though.
[2] and [3] are used to get a byte array segment out of the original array.

Willy.

Oct 3 '07 #2
.... csp2TimeStamp2S tr(byte[] value, StringBuilder Stamp, int nMaxLength);

int nRC, nBytesRead;
byte[] arrbyteBarcode= new byte[100];
StringBuilder sb = new StringBuilder(" ", 100);
nBytesRead = csp2GetPacket(a rrbyteBarcode[0], i, 100);
ArraySegment<by teas = new ArraySegment<by te>(arrbyteBarc ode,
nBytesRead-4, 4); // [2]
nRC = csp2TimeStamp2S tr(as.Array, sb, sb.Length); // [3]
TextBox1.text= sb.toString();
[snip]
[2] and [3] are used to get a byte array segment out of the original
array.
No, it doesn't. ArraySegment<T> .Array is the entire array, not a subset.
Oct 3 '07 #3
Thank you! However, it doens't really work. sb.ToString() turns a
space " "

I capture some screens and code here: http://docs.google.com/Doc?id=dd5djd97_44d5nz2p

another question, this is not really related, how does it handle
access the value to "sb" wiht out "ref" or "out"? does c# handle this
by itself? I just wonder how to use it in the pure c# without c++
without global variables nor ref or out.
"Bob Yang" <bobya...@gmail .comwrote in message

news:11******** *************@d 55g2000hsg.goog legroups.com...


Hi, I have this in C++ and I like to call it from c# to get the value
but I fail. it will be good if you can give me some information. I
tried it in VB.net it works but I use almost the same way as VB in C#
but it doens't work.
c++: (csp2.dll)
NoMangle long DLL_IMPORT_EXPO RT csp2TimeStamp2S tr(unsigned char
*Stamp, char *value, long nMaxLength);
VB.net: (this works correctly)
Declare Function csp2TimeStamp2S tr Lib "csp2.dll" (ByRef Stamp As
Byte, ByVal value As String, ByVal nMaxLength As Integer) As Integer
Dim nRC As Integer
Dim arrbyteBarcode( 99) As Byte '100 elements
Dim nBytesRead As Integer
Dim bstrTmp As New VB6.FixedLength String(50)
nBytesRead = csp2GetPacket(a rrbyteBarcode(0 ), i, 100)
nRC = csp2TimeStamp2S tr(arrbyteBarco de(nBytesRead - 4), bstrTmp.Value,
Len(bstrTmp.Val ue))
TextBox1.text= VB.Left(bstrTmp .Value, 20)
C#: (this doesn't work :( )
[System.Runtime. InteropServices .DllImport("csp 2.DLL")] static extern
int csp2TimeStamp2S tr(byte value, string Stamp, int nMaxLength);
int nRC, nBytesRead;
byte[] arrbyteBarcode= new byte[100];
FixedLengthStri ng bstrTmp = new FixedLengthStri ng(50);
nBytesRead = csp2GetPacket(a rrbyteBarcode[0], i, 100);
bstrTmp=" ";
nRC = csp2TimeStamp2S tr(arrbyteBarco de[nBytesRead-4],
bstrTmp.Value, bstrTmp.Value.L ength);
TextBox1.text= bstrTmp.Value.t oString();

.... csp2TimeStamp2S tr(byte[] value, StringBuilder Stamp, int nMaxLength);

int nRC, nBytesRead;
byte[] arrbyteBarcode= new byte[100];
StringBuilder sb = new StringBuilder(" ", 100);
nBytesRead = csp2GetPacket(a rrbyteBarcode[0], i, 100);
ArraySegment<by teas = new ArraySegment<by te>(arrbyteBarc ode,
nBytesRead-4, 4); // [2]
nRC = csp2TimeStamp2S tr(as.Array, sb, sb.Length); // [3]
TextBox1.text= sb.toString();

First you have to pass a byte[] as first parameter to the function, you are
passing the first byte of the array by value. Note that the VB code is
flawed too, you should pass a byte[] not a refrence to a byte, this code
will fail on 64 bit Windows!
Second [1]get rid of the VB6 dependency and use a StringBuilder to pass a
fixed string buffer. Not sure why you are passing a " " char when calling
this function though.
[2] and [3] are used to get a byte array segment out of the original array.

Willy.- -

- -

Oct 3 '07 #4
thank you. you are right so I change to this but I still not able to
get the value for "sb". any recommadation? thank you!

byte[] bb2 = new byte[100];
nBytesRead2 = nBytesRead - 4;

for (i = 0; i < 4; i++)
{
bb2[i] = arrbyteBarcode[nBytesRead2];
nBytesRead2++;
}
nRC = csp2TimeStamp2S tr(bb2, sb, sb.Length);

.... csp2TimeStamp2S tr(byte[] value, StringBuilder Stamp, int nMaxLength);
int nRC, nBytesRead;
byte[] arrbyteBarcode= new byte[100];
StringBuilder sb = new StringBuilder(" ", 100);
nBytesRead = csp2GetPacket(a rrbyteBarcode[0], i, 100);
ArraySegment<by teas = new ArraySegment<by te>(arrbyteBarc ode,
nBytesRead-4, 4); // [2]
nRC = csp2TimeStamp2S tr(as.Array, sb, sb.Length); // [3]
TextBox1.text= sb.toString();

[snip]
[2] and [3] are used to get a byte array segment out of the original
array.

No, it doesn't. ArraySegment<T> .Array is the entire array, not a subset.

Oct 3 '07 #5
I changed something and start to read value now. even it is not what I
want yet I think I may pass the wrong bb2.. I will try to test more.
and thank you to all of you! once I am done I will post the final
codes and share with everyone.

by the way, if someone can tell me how does c# assign a value to a
parameter without "ref" or "out" it will be great. thank you!
thank you. you are right so I change to this but I still not able to
get the value for "sb". any recommadation? thank you!

byte[] bb2 = new byte[100];
nBytesRead2 = nBytesRead - 4;

for (i = 0; i < 4; i++)
{
bb2[i] = arrbyteBarcode[nBytesRead2];
nBytesRead2++;
}

nRC = csp2TimeStamp2S tr(bb2, sb, sb.Length);
.... csp2TimeStamp2S tr(byte[] value, StringBuilder Stamp, int nMaxLength);
int nRC, nBytesRead;
byte[] arrbyteBarcode= new byte[100];
StringBuilder sb = new StringBuilder(" ", 100);
nBytesRead = csp2GetPacket(a rrbyteBarcode[0], i, 100);
ArraySegment<by teas = new ArraySegment<by te>(arrbyteBarc ode,
nBytesRead-4, 4); // [2]
nRC = csp2TimeStamp2S tr(as.Array, sb, sb.Length); // [3]
TextBox1.text= sb.toString();
[snip]
[2] and [3] are used to get a byte array segment out of the original
array.
No, it doesn't. ArraySegment<T> .Array is the entire array, not a subset.- -

- -

Oct 3 '07 #6
"Ben Voigt [C++ MVP]" <rb*@nospam.nos pamwrote in message
news:%2******** *******@TK2MSFT NGP04.phx.gbl.. .
>
>.... csp2TimeStamp2S tr(byte[] value, StringBuilder Stamp, int
nMaxLength);

int nRC, nBytesRead;
byte[] arrbyteBarcode= new byte[100];
StringBuilder sb = new StringBuilder(" ", 100);
nBytesRead = csp2GetPacket(a rrbyteBarcode[0], i, 100);
ArraySegment<by teas = new ArraySegment<by te>(arrbyteBarc ode,
nBytesRead-4, 4); // [2]
nRC = csp2TimeStamp2S tr(as.Array, sb, sb.Length); // [3]
TextBox1.text= sb.toString();

[snip]
>[2] and [3] are used to get a byte array segment out of the original
array.

No, it doesn't. ArraySegment<T> .Array is the entire array, not a subset.

Very true, ArraySegment is of little use in general and especially here.
Important point is that a byte[] must be passed as an argument, like this...
....
nBytesRead = csp2GetPacket(a rrbyteBarcode[0], i, 100);
byte[] ba = new byte[4];
Array.Copy(arrb yteBarcode, nBytesRead - 4, ba, 0, 4);
nRC = csp2TimeStamp2S tr(ba, sb, sb.Length);
...

The same applies to the csp2GetPacket function, which is wrong too.

Willy.

Oct 3 '07 #7
thank you to Willy and Ben! yes, the key point is using "unsigned char
*Stamp, char *value" in c# to the right type.

1. by the way... how to make a method able to assign the value to the
parameter without using "ref" or "out"? thank you! I was surprice, it
can assign "arrbyteBarcode " and "sb" values wihtout using those
keyword ref and out!!

2. moreover, how come "char *value" =StringBuilder but "unsigned char
*Stamp" is NOT = to StringBuilder and must use byte array?


for everyone's information. here is the finally code in c#: (please
see previous post for the c++ and VB.net part)

[System.Runtime. InteropServices .DllImport("csp 2.DLL")]
static extern int csp2TimeStamp2S tr(byte[] value, StringBuilder
Stamp, int nMaxLength);
int nRC;
int nBytesRead, nBytesRead2;
byte[] arrbyteBarcode = new byte[100];
byte[] bb2 = new byte[100];

StringBuilder sb = new StringBuilder(" ", 100);

nBytesRead = csp2GetPacket(a rrbyteBarcode, 1, 100); //get
the packages's byte data into arrbyteBarcode; return the array size to
nBytesRead

nBytesRead2 = nBytesRead - 4; // find the starting point
for the last 4 byte

for (i = 0; i < 4; i++) // assing last
4 bytes data to the new byte array
{
bb2[i] =
arrbyteBarcode[nBytesRead2];
nBytesRead2++;
}

////get timestamp

nRC = csp2TimeStamp2S tr(bb2, sb,
100);
richTextBox1.Te xt = richTextBox1.Te xt
+ "Time: " + sb.ToString() + "\n";

Oct 4 '07 #8
See inline
Willy.

"Bob Yang" <bo******@gmail .comwrote in message
news:11******** *************@w 3g2000hsg.googl egroups.com...
thank you to Willy and Ben! yes, the key point is using "unsigned char
*Stamp, char *value" in c# to the right type.

1. by the way... how to make a method able to assign the value to the
parameter without using "ref" or "out"? thank you! I was surprice, it
can assign "arrbyteBarcode " and "sb" values wihtout using those
keyword ref and out!!
When you pass a *reference type* like byte[] (or any other array type), the
interop layer pins the array instance and passes a pointer to the first
element in the array to the callee.
It's important that you pass an array when the C function is expecting a
pointer (to an array), you should not pass a *reference* to an array
element.
// OK
[DllImport...] ..... Test(byte[] ar, int size);
byte[] ba =...
Test(ba, ...);

// NOK
[DllImport...] ... Test(ref byte, int size);
byte[] ba = ...;
Test(ref ba[0], ...);

The latter may work on 32 bit windows, but fails on 64 bit windows due to an
optimization in the interop layer of the 64 bit CLR

2. moreover, how come "char *value" =StringBuilder but "unsigned char
*Stamp" is NOT = to StringBuilder and must use byte array?

The underlying buffer of StringBuilder is a (UNICODE) char array, the
interop layer will apply the necessary conversions as defined by the
marshaling attributes (MarshalAs) applied to the parameter.

>

for everyone's information. here is the finally code in c#: (please
see previous post for the c++ and VB.net part)

[System.Runtime. InteropServices .DllImport("csp 2.DLL")]
static extern int csp2TimeStamp2S tr(byte[] value, StringBuilder
Stamp, int nMaxLength);
int nRC;
int nBytesRead, nBytesRead2;
byte[] arrbyteBarcode = new byte[100];
byte[] bb2 = new byte[100];

StringBuilder sb = new StringBuilder(" ", 100);

nBytesRead = csp2GetPacket(a rrbyteBarcode, 1, 100); //get
the packages's byte data into arrbyteBarcode; return the array size to
nBytesRead

nBytesRead2 = nBytesRead - 4; // find the starting point
for the last 4 byte

for (i = 0; i < 4; i++) // assing last
4 bytes data to the new byte array
{
bb2[i] =
arrbyteBarcode[nBytesRead2];
nBytesRead2++;
}

////get timestamp

nRC = csp2TimeStamp2S tr(bb2, sb,
100);
richTextBox1.Te xt = richTextBox1.Te xt
+ "Time: " + sb.ToString() + "\n";

Oct 4 '07 #9
thank you! great information.

1. in DllImport situation, C++ is able to change value for a private
variable (I think it is because c++ will locate the variable's address
and change the value there?). what's about in the pure c# without
using any dll? for example, like the code below. is it possible to
change the passing parameters value without using "out" or "ref"?
thank you!
class OutReturnExampl e
{
static void Method(out int i, out string s1, out string s2)
{
i = 44;
s1 = "I've been returned";
s2 = null;
}
static void Main()
{
int value;
string str1, str2;
Method(out value, out str1, out str2);
// value is now 44
// str1 is now "I've been returned"
// str2 is (still) null;
}
}

2. if I have a c++ as (unsigned char[] ca1, char[] ca2), how can I
call it correctly in c#? is it equal to (byte[] ca1, byte[] ca2)?
Moreover, ca1 and ca2 are only passing IN the the value and c++ cannot
change the value because it is not a pointer in c++?

thank you!


See inline
Willy.

"Bob Yang" <bobya...@gmail .comwrote in message

news:11******** *************@w 3g2000hsg.googl egroups.com...
thank you to Willy and Ben! yes, the key point is using "unsigned char
*Stamp, char *value" in c# to the right type.
1. by the way... how to make a method able to assign the value to the
parameter without using "ref" or "out"? thank you! I was surprice, it
can assign "arrbyteBarcode " and "sb" values wihtout using those
keyword ref and out!!

When you pass a *reference type* like byte[] (or any other array type), the
interop layer pins the array instance and passes a pointer to the first
element in the array to the callee.
It's important that you pass an array when the C function is expecting a
pointer (to an array), you should not pass a *reference* to an array
element.
// OK
[DllImport...] ..... Test(byte[] ar, int size);
byte[] ba =...
Test(ba, ...);

// NOK
[DllImport...] ... Test(ref byte, int size);
byte[] ba = ...;
Test(ref ba[0], ...);

The latter may work on 32 bit windows, but fails on 64 bit windows due to an
optimization in the interop layer of the 64 bit CLR
2. moreover, how come "char *value" =StringBuilder but "unsigned char
*Stamp" is NOT = to StringBuilder and must use byte array?

The underlying buffer of StringBuilder is a (UNICODE) char array, the
interop layer will apply the necessary conversions as defined by the
marshaling attributes (MarshalAs) applied to the parameter.


for everyone's information. here is the finally code in c#: (please
see previous post for the c++ and VB.net part)
[System.Runtime. InteropServices .DllImport("csp 2.DLL")]
static extern int csp2TimeStamp2S tr(byte[] value, StringBuilder
Stamp, int nMaxLength);
int nRC;
int nBytesRead, nBytesRead2;
byte[] arrbyteBarcode = new byte[100];
byte[] bb2 = new byte[100];
StringBuilder sb = new StringBuilder(" ", 100);
nBytesRead = csp2GetPacket(a rrbyteBarcode, 1, 100); //get
the packages's byte data into arrbyteBarcode; return the array size to
nBytesRead
nBytesRead2 = nBytesRead - 4; // find the starting point
for the last 4 byte
for (i = 0; i < 4; i++) // assing last
4 bytes data to the new byte array
{
bb2[i] =
arrbyteBarcode[nBytesRead2];
nBytesRead2++;
}
////get timestamp
nRC = csp2TimeStamp2S tr(bb2, sb,
100);
richTextBox1.Te xt = richTextBox1.Te xt
+ "Time: " + sb.ToString() + "\n";- -

- -

Oct 4 '07 #10

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

Similar topics

1
7772
by: Paul | last post by:
Hmmm, didn't seem to work. I have set session.use_cookies = 1 and session.use_trans_sid = 1 in my php.ini file. Index.php contains: ---------------------------------------------------------------------------- <?php ini_set("session.use_cookies", "off"); ini_set("session.use_trans_sid", "on"); session_start(); $_SESSION = ""; $_SESSION =...
12
6521
by: Kevin Lyons | last post by:
Hello, I am trying to get my select options (courses) passed correctly from the following URL: http://www.dslextreme.com/users/kevinlyons/selectBoxes.html I am having difficulty getting the courses to pass the correct option value and then be displayed at the following URL: http://www.dslextreme.com/users/kevinlyons/selectResults.html ...
3
14916
by: domeceo | last post by:
can anyone tell me why I cannot pass values in a setTimeout function whenever I use this function it says "menu is undefined" after th alert. function imgOff(menu, num) { if (document.images) { document.images.src = eval("mt" +menu+ ".src") } alert("imgOff_hidemenu"); hideMenu=setTimeout('Hide(menu,num)',500);
2
4576
by: Gordon Hudson | last post by:
Hello Here is what I am trying to do: Make a hyperlink on a data entry form with its URL built from the values for fields in that entry on the database. So, I would go to record 65785 click on the link and it would open a web page. The URL contained in the hyperlink would pass the name and address field
2
1920
by: craigkenisston | last post by:
Hi, I created an array of objects like this : object Values = {myObject.myprop, otherobject.otherprop, thirdobject.xprop}; Then I pass it to a method. and I get the values filled in that method. I can debug the method and values are being assigned. But when I am in the calling procedure I no longer see the values, I
1
2696
by: olduncleamos | last post by:
Hello all. With a background in ASP, I am finding the work required for passing values between pages mystifying. For various obvious reasons, I have eliminated using cookies and session to store state data. The only ASP.NET options left is to use the Server.Transfer to transfer to page 2 from page 1, and then use the context to get whatever...
11
8103
by: John Pass | last post by:
Hi, In the attached example, I do understand that the references are not changed if an array is passed by Val. What I do not understand is the result of line 99 (If one can find this by line number) which is the last line of the following sub routine: ' procedure modifies elements of array and assigns ' new reference (note ByVal) Sub...
1
2102
by: vncntj | last post by:
I have a C#.NET that simply passes 6 values to a Stored Procedure. But I'm trying to get the (Default.aspx.cs page) to handle passing the values to the sp. The goal is to pass the values and see if any records are returned. I will later insert some conditional statements. Here is my Default.aspx.cs protected void btnNext_Click(object...
3
2122
by: ishwarbg | last post by:
Hi Everyone, I have a .Net Application, through which I am invoking a function from a legacy DLL developed in C++. My structure in C# contains some data of type double which I need to pass to to the DLL to get some results back from it. My Structure In C# looks like this: public struct InputPurchaseOrder { public...
5
3200
by: jmartmem | last post by:
Greetings, I have built an Update Record Form in an ASP page. This form contains a number of fields, such as text boxes and menus, to name a few. Upon clicking the 'submit' button, I want the form values to pass to a confirmation page that shows the values entered and selected, with a CDONTS auto email generated at the same time. My problem...
0
7665
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...
0
7888
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. ...
0
8106
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...
1
7642
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...
0
7950
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...
1
5484
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...
0
3626
by: adsilva | last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
1
2082
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
0
924
bsmnconsultancy
by: bsmnconsultancy | last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence can significantly impact your brand's success. BSMN Consultancy, a leader in Website Development in Toronto offers valuable insights into creating...

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.