473,729 Members | 2,309 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

explicit cast between generic types

Jon
Hi,

When I try to compile the following generic class, the compiler gives
me many errors "Cannot conver type '...' to '...'" on the lines
indicated. Besides, the C# compiler gives me errors even if I don't
declare and instantiate C_Filter_MA<Ti, Tsin my program.
Ti and Ts should be one of {Byte, UInt16, UInt32, UInt64, SByte,
Int16, Int32, Int64, double}.

Any clue on how to be able to compile this class?
Thank you very much.

// =============== =============== =============== =============== ==
public class C_Filter_MA<Ti, Ts>
{
// ............... ............... ............... ...............
protected Queue<Ti Ti_queue; // Queue (FIFO) that stores the
items.
protected Ts Ts_sum; // Sum of the values stored in the
queue.
...
// ............... ............... ............... ...............
...
// ............... ............... ............... ...............
public void Clear()
{
...
Ts_sum =(Ts)0; // <-- Compile error.
...
} // Clear
// ............... ............... ............... ...............
public Ti InOutData(Ti Ti_in)
{
...
Ts_sum -=(Ts)Ti_queue.D equeue(); // <-- Compile error.
...
Ts_sum +=(Ts)Ti_in; // <-- Compile error.
...
} // InOutData
// ............... ............... ............... ...............
} // C_Filter_MA
// =============== =============== =============== =============== ==

Dec 10 '07 #1
6 2708
Jon,

Why do you have two types to begin with? How is it that the sum of
types Ti equals a ^NEW^ type Ts? Why wouldn't you just need one type, Ti?

As for the Clear method, you can fix this by using default:

public void Clear()
{
// This should probably be Ti, the same could be applied.
Ts_sum = default(Ti);
} // Clear

If Ti is a blittable type, then an instance of that type will be created
with the data set to 0 for all bits in the type. In the case of int,
double, etc, etc, that means values of 0.

Changing to Ti will fix the Dequeue issue as well.

As for adding, you aren't going to be able to do much with that, since
the constraint system doesn't tell the compiler anything about operations on
a type. Because of this, you will need another class that handles this.
First, you have to define an interface like this:

interface ISimpleMath<T>
{
T Add(T value1, T value2);
T Subtract(T value1, T value2);
}

Then, you implement it for each of the types you want to use, like so:

class IntSimpleMath: ISimpleMath<int >
{
public int Add(int value1, int value2)
{
// Return the sum.
return value1 + value2;
}

public int Subtract(int value1, int value2)
{
// Return the difference.
return value1 - value2;
}
}

Finally, you would add a second type to your generic type which would
indicate the type used to perform the adding:

public class C_Filter_MA<Ti, TSimpleMathwher e TSimpleMath:
ISimpleMath<Ti> , new()
{
// Assuming that the operations on the implementation of ISimpleMath are
thread-safe (and
// they should be, since you are passing all operands into the method
and not storing
// shared state), you can store one instance and use that across all
instances of the type.
private static readonly SimpleMathImple mentation = new TSimpleMath();

// ............... ............... ............... ...............
protected Queue<Ti Ti_queue; // Queue (FIFO) that stores the items.

// Changed to be of type Ti.
protected Ti Ts_sum; // Sum of the values stored in the queue.

public void Clear()
{
Ts_sum = default(Ti)
} // Clear

public Ti InOutData(Ti Ti_in)
{
// Get the item.
Ti item = Ti_queue.Dequeu e();

// Subtract from the sum.
Ts_sum = SimpleMathImple mentation.Subtr act(Ts_sum, item);

// Add the item passed in.
Ts_sum = SimpleMathImple mentation.Add(T s_sum, Ti_in);
} // InOutData
} // C_Filter_MA
--
- Nicholas Paldino [.NET/C# MVP]
- mv*@spam.guard. caspershouse.co m

"Jon" <jm*@hotmail.co mwrote in message
news:mp******** *************** *********@4ax.c om...
Hi,

When I try to compile the following generic class, the compiler gives
me many errors "Cannot conver type '...' to '...'" on the lines
indicated. Besides, the C# compiler gives me errors even if I don't
declare and instantiate C_Filter_MA<Ti, Tsin my program.
Ti and Ts should be one of {Byte, UInt16, UInt32, UInt64, SByte,
Int16, Int32, Int64, double}.

Any clue on how to be able to compile this class?
Thank you very much.

// =============== =============== =============== =============== ==
public class C_Filter_MA<Ti, Ts>
{
// ............... ............... ............... ...............
protected Queue<Ti Ti_queue; // Queue (FIFO) that stores the
items.
protected Ts Ts_sum; // Sum of the values stored in the
queue.
...
// ............... ............... ............... ...............
...
// ............... ............... ............... ...............
public void Clear()
{
...
Ts_sum =(Ts)0; // <-- Compile error.
...
} // Clear
// ............... ............... ............... ...............
public Ti InOutData(Ti Ti_in)
{
...
Ts_sum -=(Ts)Ti_queue.D equeue(); // <-- Compile error.
...
Ts_sum +=(Ts)Ti_in; // <-- Compile error.
...
} // InOutData
// ............... ............... ............... ...............
} // C_Filter_MA
// =============== =============== =============== =============== ==

Dec 10 '07 #2
Ts_sum -=(Ts)Ti_queue.D equeue(); // <-- Compile error.
Ts_sum +=(Ts)Ti_in; // <-- Compile error.

For info, I have a working generic math implementation as an in-
progress side project. It includes standard operators and conversion;
it runtime (not compile-time) validated but is very fast.

I posted some of it on this forum previously, but let me know if this
is of interest.

Marc
Dec 10 '07 #3
Jon
Hi Nicholas,

I tried your custom interface solution. I end up with only 4 compile
erros, in two lines. Search for token "errors" in the source code
shown below. In line

private static readonly Ts_SimpleMathIm plementation= new
Ts_SimpleMath() ;

it is like it doesn't know how to create a new instance of
Ts_SimpleMath. The "new ()" in line

where Ti_SimpleMath : I_SimpleMath<Ti >, new()

presumably means that Ti_SimpleMath must have a public parameterless
constructor. How can I specify the constructor of Ti_SimpleMath ? In
I_SimpleMath<T> ? How?

I know that I ended up not using "Ti_SimpleMathI mplementation", but I
would keep it just in case. I do use "Ts_SimpleMathI mplementation".

Sorry about the long post.

If you know why I'm getting those errors, please let me know.
Thank you.

PS: I'm starting to think about not using generics for this purpose,
and instead define two or three classes like "C_Filter_MA_u0 8_u32",
"C_Filter_MA_u1 6_u32" and "C_Filter_MA_do uble_double", for instance,
because I'll probably end up with fewer lines of code. All this has
really surprised me.
---------------------------------------
using System;
using System.Collecti ons.Generic;

// These "using" are the C# equivalent ones to "typedef" in C++.
using u08 =System.Byte;
using u16 =System.UInt16;
using u32 =System.UInt32;
using u64 =System.UInt64;

using i08 =System.SByte;
using i16 =System.Int16;
using i32 =System.Int32;
using i64 =System.Int64;

namespace N_Filters
{
#region Interfaces and their implementations .
// =============== =============== =============== =============== ===
// Interfaces cannot contain operators.
public interface I_SimpleMath<T>
{
T Add(T val1, T val2);
T Subtract(T val1, T val2);
T Multiply(T val1, T val2);
T Divide(T val1, T val2);
T ShiftLeft(T val1,u08 shift_amount);
T ShiftRight(T val1,u08 shift_amount);
} // I_SimpleMath
// =============== =============== =============== =============== ===
public class C_SimpleMath_u0 8 : I_SimpleMath<u0 8>
{
public u08 Add(u08 val1, u08 val2)
{
return((u08)(va l1+val2));
}
public u08 Subtract(u08 val1, u08 val2)
{
return((u08)(va l1-val2));
}
public u08 Multiply(u08 val1, u08 val2)
{
return((u08)(va l1*val2));
}
public u08 Divide(u08 val1, u08 val2)
{
return((u08)(va l1/val2));
}
public u08 ShiftLeft(u08 val1,u08 shift_amount)
{
return((u08)(va l1<<shift_amoun t));
}
public u08 ShiftRight(u08 val1,u08 shift_amount)
{
return((u08)(va l1>>shift_amoun t));
}
} // C_SimpleMath_u0 8
// =============== =============== =============== =============== ===
public class C_SimpleMath_u1 6 : I_SimpleMath<u1 6>
{
public u16 Add(u16 val1, u16 val2)
{
return((u16)(va l1+val2));
}
public u16 Subtract(u16 val1, u16 val2)
{
return((u16)(va l1-val2));
}
public u16 Multiply(u16 val1, u16 val2)
{
return((u16)(va l1*val2));
}
public u16 Divide(u16 val1, u16 val2)
{
return((u16)(va l1/val2));
}
public u16 ShiftLeft(u16 val1,u08 shift_amount)
{
return((u16)(va l1<<shift_amoun t));
}
public u16 ShiftRight(u16 val1,u08 shift_amount)
{
return((u16)(va l1>>shift_amoun t));
}
} // C_SimpleMath_u1 6
// =============== =============== =============== =============== ===
public class C_SimpleMath_u3 2 : I_SimpleMath<u3 2>
{
public u32 Add(u32 val1, u32 val2)
{
return((u32)(va l1+val2));
}
public u32 Subtract(u32 val1, u32 val2)
{
return((u32)(va l1-val2));
}
public u32 Multiply(u32 val1, u32 val2)
{
return((u32)(va l1*val2));
}
public u32 Divide(u32 val1, u32 val2)
{
return((u32)(va l1/val2));
}
public u32 ShiftLeft(u32 val1,u08 shift_amount)
{
return((u32)(va l1<<shift_amoun t));
}
public u32 ShiftRight(u32 val1,u08 shift_amount)
{
return((u32)(va l1>>shift_amoun t));
}
} // C_SimpleMath_u3 2
// =============== =============== =============== =============== ===
public class C_SimpleMath_u6 4 : I_SimpleMath<u6 4>
{
public u64 Add(u64 val1, u64 val2)
{
return((u64)(va l1+val2));
}
public u64 Subtract(u64 val1, u64 val2)
{
return((u64)(va l1-val2));
}
public u64 Multiply(u64 val1, u64 val2)
{
return((u64)(va l1*val2));
}
public u64 Divide(u64 val1, u64 val2)
{
return((u64)(va l1/val2));
}
public u64 ShiftLeft(u64 val1,u08 shift_amount)
{
return((u64)(va l1<<shift_amoun t));
}
public u64 ShiftRight(u64 val1,u08 shift_amount)
{
return((u64)(va l1>>shift_amoun t));
}
} // C_SimpleMath_u6 4
// =============== =============== =============== =============== ===
public class C_SimpleMath_i0 8 : I_SimpleMath<i0 8>
{
public i08 Add(i08 val1, i08 val2)
{
return((i08)(va l1+val2));
}
public i08 Subtract(i08 val1, i08 val2)
{
return((i08)(va l1-val2));
}
public i08 Multiply(i08 val1, i08 val2)
{
return((i08)(va l1*val2));
}
public i08 Divide(i08 val1, i08 val2)
{
return((i08)(va l1/val2));
}
public i08 ShiftLeft(i08 val1,u08 shift_amount)
{
return((i08)(va l1<<shift_amoun t));
}
public i08 ShiftRight(i08 val1,u08 shift_amount)
{
return((i08)(va l1>>shift_amoun t));
}
} // C_SimpleMath_i0 8
// =============== =============== =============== =============== ===
public class C_SimpleMath_i1 6 : I_SimpleMath<i1 6>
{
public i16 Add(i16 val1, i16 val2)
{
return((i16)(va l1+val2));
}
public i16 Subtract(i16 val1, i16 val2)
{
return((i16)(va l1-val2));
}
public i16 Multiply(i16 val1, i16 val2)
{
return((i16)(va l1*val2));
}
public i16 Divide(i16 val1, i16 val2)
{
return((i16)(va l1/val2));
}
public i16 ShiftLeft(i16 val1,u08 shift_amount)
{
return((i16)(va l1<<shift_amoun t));
}
public i16 ShiftRight(i16 val1,u08 shift_amount)
{
return((i16)(va l1>>shift_amoun t));
}
} // C_SimpleMath_i1 6
// =============== =============== =============== =============== ===
public class C_SimpleMath_i3 2 : I_SimpleMath<i3 2>
{
public i32 Add(i32 val1, i32 val2)
{
return((i32)(va l1+val2));
}
public i32 Subtract(i32 val1, i32 val2)
{
return((i32)(va l1-val2));
}
public i32 Multiply(i32 val1, i32 val2)
{
return((i32)(va l1*val2));
}
public i32 Divide(i32 val1, i32 val2)
{
return((i32)(va l1/val2));
}
public i32 ShiftLeft(i32 val1,u08 shift_amount)
{
return((i32)(va l1<<shift_amoun t));
}
public i32 ShiftRight(i32 val1,u08 shift_amount)
{
return((i32)(va l1>>shift_amoun t));
}
} // C_SimpleMath_i3 2
// =============== =============== =============== =============== ===
public class C_SimpleMath_i6 4 : I_SimpleMath<i6 4>
{
public i64 Add(i64 val1, i64 val2)
{
return((i64)(va l1+val2));
}
public i64 Subtract(i64 val1, i64 val2)
{
return((i64)(va l1-val2));
}
public i64 Multiply(i64 val1, i64 val2)
{
return((i64)(va l1*val2));
}
public i64 Divide(i64 val1, i64 val2)
{
return((i64)(va l1/val2));
}
public i64 ShiftLeft(i64 val1,u08 shift_amount)
{
return((i64)(va l1<<shift_amoun t));
}
public i64 ShiftRight(i64 val1,u08 shift_amount)
{
return((i64)(va l1>>shift_amoun t));
}
} // C_SimpleMath_i6 4
// =============== =============== =============== =============== ===
public class C_SimpleMath_do uble : I_SimpleMath<do uble>
{
public double Add(double val1, double val2)
{
return((double) (val1+val2));
}
public double Subtract(double val1, double val2)
{
return((double) (val1-val2));
}
public double Multiply(double val1, double val2)
{
return((double) (val1*val2));
}
public double Divide(double val1, double val2)
{
return((double) (val1/val2));
}
public double ShiftLeft(doubl e val1,u08 shift_amount)
{
return(val1*Mat h.Pow(2.0,(doub le)shift_amount ));
}
public double ShiftRight(doub le val1,u08 shift_amount)
{
return(val1*Mat h.Pow(2.0,(doub le)shift_amount *-1.0));
}
} // C_SimpleMath_do uble
#endregion
// =============== =============== =============== =============== ===
// Moving average filter.
// Ti = T_item {u08,u16,u32,u6 4,i08,i16,i32,i 64,double}.
// Ts = T_sum {u08,u16,u32,u6 4,i08,i16,i32,i 64,double}.

public class C_Filter_MA<Ti, Ti_SimpleMath,T s,Ts_SimpleMath >
where Ti : IComparable, IFormattable, IConvertible,
IComparable<Ti> , IEquatable<Ti>
where Ti_SimpleMath : I_SimpleMath<Ti >, new()
where Ts : IComparable, IFormattable, IConvertible,
IComparable<Ts> , IEquatable<Ts>
where Ts_SimpleMath : I_SimpleMath<Ts >, new()
{
// ............... ............... ............... ............... .
private static readonly Ti_SimpleMathIm plementation= new
Ti_SimpleMath() ; // <-- Compile errors "Invalid token '=' in class,
struct, or interface member declaration" and "Class, struct, or
interface method must have a return type".
private static readonly Ts_SimpleMathIm plementation= new
Ts_SimpleMath() ; // <-- Compile errors "Invalid token '=' in class,
struct, or interface member declaration" and "Class, struct, or
interface method must have a return type".
// ............... ............... ............... ............... .
protected Queue<Ti Ti_queue; // Queue (FIFO) that
stores the items.
public int Ti_queue_capaci ty; // Queue does not
have any member field called Capacity.
protected Ts Ts_sum; // Sum of the values
stored in the queue.
protected u08 u08_log2ofsize; // Log2(<size of
fifo>). So, size of fifo will always be a power of 2.
// ............... ............... ............... ............... .
public C_Filter_MA(u08 u08_log2ofsize)
{
this.u08_log2of size=u08_log2of size;
Ti_queue_capaci ty=1<<u08_log2o fsize;
Ti_queue=new Queue<Ti>(Ti_qu eue_capacity);
Clear();
} // C_Filter_MA
// ............... ............... ............... ............... .
public void Clear()
{
Ti_queue.Clear( );
Ts_sum=default( Ts);
} // Clear
// ............... ............... ............... ............... .
public void Init(Ti Ti_initial)
{
Ti_queue.Clear( );

Ts_sum=(Ts)Conv ert.ChangeType( Ti_initial.ToIn t32()*Ti_queue_ capacity,typeof (Ts));
if (Ti_initial.Equ als(default(Ti) )) return;
for (int i=0;i<Ti_queue_ capacity;i++)
{
Ti_queue.Enqueu e(Ti_initial);
} // for
} // Init
// ............... ............... ............... ............... .
public Ti InOutData(Ti Ti_in)
{
if (Ti_queue.Count >=Ti_queue_capa city)
{

Ts_sum=Ts_Simpl eMathImplementa tion.Subtract(T s_sum,(Ts)Conve rt.ChangeType(T i_queue.Dequeue (),typeof(Ts))) ;
} // if
Ti_queue.Enqueu e(Ti_in);

Ts_sum=Ts_Simpl eMathImplementa tion.Add(Ts_sum ,(Ts)Convert.Ch angeType(Ti_in, typeof(Ts)));
return(
(Ti)Convert.Cha ngeType(Ts_Simp leMathImplement ation.ShiftRigh t(Ts_sum,u08_lo g2ofsize),typeo f(Ti))
);
} // InOutData
// ............... ............... ............... ............... .
} // C_Filter_MA
// =============== =============== =============== =============== ===
} // N_Filters

Dec 11 '07 #4
Jon
On Mon, 10 Dec 2007 14:27:33 -0800 (PST), Marc Gravell
<ma**********@g mail.comwrote:
Ts_sum -=(Ts)Ti_queue.D equeue(); // <-- Compile error.
Ts_sum +=(Ts)Ti_in; // <-- Compile error.

For info, I have a working generic math implementation as an in-
progress side project. It includes standard operators and conversion;
it runtime (not compile-time) validated but is very fast.

I posted some of it on this forum previously, but let me know if this
is of interest.

Marc
Even though I prefer compile-time validation, I would be glad to take
a look at your implementation. If you have a link, please let me know.
Otherwise, please write me at "cucafera (at) telefonica (dot) com"

Thank you.

Dec 11 '07 #5
I have e-mailed you a sample, but I've also just noticed that you
mention CF. Unfortunately, the code doesn't compile in CF 3.5, as it
uses some framework classes that aren't supported on that platform. It
may be possible to re-work the concept using Delegate.Create Delegate
and the various operators, but there are a lot of special cases where
the operator is supplied by the compiler (not the Type) which would
need surrogate methods (which is partly what I was hoping to avoid).

Marc
Dec 11 '07 #6
but that didn't work either. It still doesn't know how to add or
subtract. My quesion is: Isn't there any existing interface, which
would be common to the integral and floating point types, which
exposes methods so common as adding, subtracting, multiplying, etc?
You've just nailed the biggest complaint about generics.
Dec 31 '07 #7

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

Similar topics

1
5651
by: Stub | last post by:
Docs says that "The compiler does not use an explicit constructor to implement an implied conversion of types. It's purpose is reserved explicitly for construction." I put up code of three cases at the bottom. Hope you can help me understand the "explicit" keyword and its usage. Specifically, Is "explicit" keyword only associated with constructor in C++? What's "implied conversion of types"?
3
5503
by: /* frank */ | last post by:
Explicit conversion is made by mean of a cast i.e. float a; int b; .... b = (int) a; But the implicit conversion? What is?
2
5391
by: babylon | last post by:
I have an enum public enum MyEnum : int { X, Y } I have to do int a = (int) MyEnum.X; can i overload the operator or other means to do something like
31
3608
by: Michael C | last post by:
If a class inherits from another class, say Form inherits from control, then I can assign the Form to a variable of type Control without needing an explicit conversion, eg Form1 f = new Form1(); Control c = f; An enum value inherits from int but it doesn't get implicitly converted: HorizontalAlignment h = HorizontalAlignment.Center;
2
2509
by: COLIN JACK | last post by:
Hi All, I've got a situation where I'm implementing an interface (BaseInterface in example below) and I want to use explicity interface implementation of an event so that I can add type safety. To see what I mean look at the example below where the class implementing the interface actually wants the event to be for a more specific delegate. Now this seems to work but the code, to me is unnecessarily ugly. This leaves me wondering if...
10
2777
by: Chet Cromer | last post by:
I am creating a set of base classes and sub classes to use throughout a program I'm developing. The base class represents a generic "lookup table" from my database that contains lists of things like manufacturers, makes, modes, etc. of cars. I have created a generic "datacollection" class and a generic "dataobject" class to represent the table and the rows within that table as a collection of objects with generic properties for...
14
4060
by: Noone | last post by:
Hello all, Ok, I want to create a program that will load plugins (dll's) from a plugin folder. I can create the forms and put them into a dll but I cannot actually add them dynamically at run time. I have tried to use the LoadLibrary and GetProc functions, which sort of worked. I got the pointer to the function but I cannot actually RUN the function like I can in C++. I have heard some things about Invoking(?) I believe but I cannot...
8
1374
by: Skysurfer | last post by:
Hi. I have some control of different type which have a particolar property, for instance MyProp. Some other controls don't have this property. How can i make a generic sub that set this property without cast? I can test if the control has the property with this line: Control.GetType.GetProperty("MyProp") But... how can i set this property?
15
2384
by: Lloyd Dupont | last post by:
Don't mistake generic type for what you would like them to be!! IFoo<Ahas nothing in common with IFoo<B>! They are completely different type create dynamically at runtime. What you ask is a bit akin to ask: "the System.Web.UI and System.Windows.Controls namespace both contains a Control class, could I use one in place of the other? common they have the same name!" If you want to use a method common to both you should do as Alun...
0
9426
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...
1
9200
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
9142
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
6722
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
6022
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();...
0
4525
by: TSSRALBI | last post by:
Hello I'm a network technician in training and I need your help. I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs. The last exercise I practiced was to create a LAN-to-LAN VPN between two Pfsense firewalls, by using IPSEC protocols. I succeeded, with both firewalls in the same network. But I'm wondering if it's possible to do the same thing, with 2 Pfsense firewalls...
0
4795
by: adsilva | last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
1
3238
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
2
2680
muto222
by: muto222 | last post by:
How can i add a mobile payment intergratation into php mysql website.

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.