473,408 Members | 1,683 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,408 software developers and data experts.

how to generate this code?

Hi all,

i'm looking for a way, a tool or a macro like this:

USEFULMACRO(foo, bar, type1 arg1, type2 arg2, ..., typeN argN)

to generate the following code:

void foo(type1 arg1, type2 arg2, ..., typeN argN)
{
bar(arg1, arg2, ..., argN);
}

N is variable.
The function "foo" invokes "bar" with the same arguments list.
All the C++ types are admitted (function pointers included).

Some idea?
Jul 31 '06 #1
22 1771
Roberto Gori wrote:
i'm looking for a way, a tool or a macro like this:

USEFULMACRO(foo, bar, type1 arg1, type2 arg2, ..., typeN argN)

to generate the following code:

void foo(type1 arg1, type2 arg2, ..., typeN argN)
{
bar(arg1, arg2, ..., argN);
}

N is variable.
The function "foo" invokes "bar" with the same arguments list.
All the C++ types are admitted (function pointers included).

Some idea?
Since you have to separate names of arguments from their types in the
macro when it's generated, you need to separate them in the macro arg
list:

USEFULMACRO(foo, bar, type1, arg1, ...

Otherwise "type1 arg1" is a single preprocessing token, and there are no
means to "split" it into two using any preprocessor mechanisms.

Since you want a variable number of arguments, you need a compiler
capable of macros with variable number of arguments, otherwise you have
to generate all macros up to maximum number of args your system is going
to handle. See "variadic macro" in the archives. Some compilers can do
that. It's not a standard construct yet, though.

V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask
Jul 31 '06 #2
Roberto Gori wrote:
Hi all,

i'm looking for a way, a tool or a macro like this:

USEFULMACRO(foo, bar, type1 arg1, type2 arg2, ..., typeN argN)

to generate the following code:

void foo(type1 arg1, type2 arg2, ..., typeN argN)
{
bar(arg1, arg2, ..., argN);
}

N is variable.
The function "foo" invokes "bar" with the same arguments list.
All the C++ types are admitted (function pointers included).

Some idea?

Can't be done. First, there is no such concept as
variable arguments in the middle of the arg list. They
must be at the end. Second, the only thing you can
do with variable args is extract them with the cstdarg
macros. You can't pass them en masse to another ...
expecting function.
Jul 31 '06 #3
Ron Natalie wrote:
Roberto Gori wrote:
>Hi all,

i'm looking for a way, a tool or a macro like this:

USEFULMACRO(foo, bar, type1 arg1, type2 arg2, ..., typeN argN)

to generate the following code:

void foo(type1 arg1, type2 arg2, ..., typeN argN)
{
bar(arg1, arg2, ..., argN);
}

N is variable.
The function "foo" invokes "bar" with the same arguments list.
All the C++ types are admitted (function pointers included).

Some idea?

Can't be done. First, there is no such concept as
variable arguments in the middle of the arg list. They
must be at the end. Second, the only thing you can
do with variable args is extract them with the cstdarg
macros. You can't pass them en masse to another ...
expecting function.
I don't think the variable arguments in the middle is what OP wants. I
also don't think that passing them en masse is the goal. Let's say we
only have three (or four, depending on how you count) things there:

USEFULMACRO(foo, bar, type arg)

What would be its definition so it is possible to generate this code:

void foo(type arg) {
bar(arg);
}

?

Methinks the problem is trying to extract the second word (token) "arg"
from the third macro argument.

V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask
Jul 31 '06 #4
Roberto Gori wrote:
i'm looking for a way, a tool or a macro like this:

USEFULMACRO(foo, bar, type1 arg1, type2 arg2, ..., typeN argN)
Long argument lists are a "design smell". That means they are an indicator
that other parts of your design could be better.

Why aren't all those arguments elements of a collection, such as an
std::map<>? Or even data stored in a class?

--
Phlip
http://c2.com/cgi/wiki?ZeekLand <-- NOT a blog!!!
Jul 31 '06 #5

"Victor Bazarov" <v.********@comAcast.netwrote in message
news:ea**********@news.datemas.de...
Roberto Gori wrote:
>i'm looking for a way, a tool or a macro like this:

USEFULMACRO(foo, bar, type1 arg1, type2 arg2, ..., typeN argN)

to generate the following code:

void foo(type1 arg1, type2 arg2, ..., typeN argN)
{
bar(arg1, arg2, ..., argN);
}

N is variable.
The function "foo" invokes "bar" with the same arguments list.
All the C++ types are admitted (function pointers included).

Some idea?

Since you have to separate names of arguments from their types in the
macro when it's generated, you need to separate them in the macro arg
list:

USEFULMACRO(foo, bar, type1, arg1, ...

Otherwise "type1 arg1" is a single preprocessing token, and there are no
means to "split" it into two using any preprocessor mechanisms.
I think that when the argument is a function pointer (something like float
(*pt2Func)(float, float) ) it's not possible to separate the tokens with
commas.
>
Since you want a variable number of arguments, you need a compiler
capable of macros with variable number of arguments, otherwise you have
to generate all macros up to maximum number of args your system is going
to handle. See "variadic macro" in the archives. Some compilers can do
that. It's not a standard construct yet, though.

V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask

Jul 31 '06 #6
Roberto Gori <r.****@cineca.itwrote:
"Victor Bazarov" <v.********@comAcast.netwrote in message
news:ea**********@news.datemas.de...
>Roberto Gori wrote:
>>i'm looking for a way, a tool or a macro like this:

USEFULMACRO(foo, bar, type1 arg1, type2 arg2, ..., typeN argN)

to generate the following code:

void foo(type1 arg1, type2 arg2, ..., typeN argN)
{
bar(arg1, arg2, ..., argN);
}

N is variable.
The function "foo" invokes "bar" with the same arguments list.
All the C++ types are admitted (function pointers included).

Some idea?

Since you have to separate names of arguments from their types in the
macro when it's generated, you need to separate them in the macro arg
list:

USEFULMACRO(foo, bar, type1, arg1, ...

Otherwise "type1 arg1" is a single preprocessing token, and there
are no means to "split" it into two using any preprocessor
mechanisms.

I think that when the argument is a function pointer (something like
float (*pt2Func)(float, float) ) it's not possible to separate the
tokens with commas.
Use a typedef, then it works.

regards
--
jb

(reply address in rot13, unscramble first)
Jul 31 '06 #7
Roberto Gori wrote:
>Roberto Gori wrote:
>>i'm looking for a way, a tool or a macro like this:

USEFULMACRO(foo, bar, type1 arg1, type2 arg2, ..., typeN argN)

to generate the following code:

void foo(type1 arg1, type2 arg2, ..., typeN argN)
{
bar(arg1, arg2, ..., argN);
}

N is variable.
The function "foo" invokes "bar" with the same arguments list.
All the C++ types are admitted (function pointers included).

Some idea?
[..]

I think that when the argument is a function pointer (something like
float (*pt2Func)(float, float) ) it's not possible to separate the
tokens with commas.
Right. That's why using macro is not a good idea. Perhaps you could use
some custom pre-processor. Something like TrollTech's "moc"...

V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask
Jul 31 '06 #8

"Victor Bazarov" <v.********@comAcast.netwrote in message
news:ea**********@news.datemas.de...
Roberto Gori wrote:
>>Roberto Gori wrote:
i'm looking for a way, a tool or a macro like this:

USEFULMACRO(foo, bar, type1 arg1, type2 arg2, ..., typeN argN)

to generate the following code:

void foo(type1 arg1, type2 arg2, ..., typeN argN)
{
bar(arg1, arg2, ..., argN);
}

N is variable.
The function "foo" invokes "bar" with the same arguments list.
All the C++ types are admitted (function pointers included).

Some idea?
[..]

I think that when the argument is a function pointer (something like
float (*pt2Func)(float, float) ) it's not possible to separate the
tokens with commas.

Right. That's why using macro is not a good idea. Perhaps you could use
some custom pre-processor. Something like TrollTech's "moc"...
I suspect you are right and moc it's not free. :(
>
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask

Jul 31 '06 #9
Roberto Gori wrote:
"Victor Bazarov" <v.********@comAcast.netwrote in message
news:ea**********@news.datemas.de...
>[..] Perhaps you
could use some custom pre-processor. Something like TrollTech's
"moc"...

I suspect you are right and moc it's not free. :(
I wasn't suggesting that you acquired (licensed) 'moc' from TrollTech.
But you can probably write your own, the tools to parse C++ source code
are all there, and there's probably plenty of free ones on the Web.

V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask
Jul 31 '06 #10

"Victor Bazarov" <v.********@comAcast.netwrote in message
news:ea**********@news.datemas.de...
Roberto Gori wrote:
>"Victor Bazarov" <v.********@comAcast.netwrote in message
news:ea**********@news.datemas.de...
>>[..] Perhaps you
could use some custom pre-processor. Something like TrollTech's
"moc"...

I suspect you are right and moc it's not free. :(

I wasn't suggesting that you acquired (licensed) 'moc' from TrollTech.
But you can probably write your own, the tools to parse C++ source code
are all there, and there's probably plenty of free ones on the Web.
Many thanks Victor.

i'm searching in the Web.
>
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask

Jul 31 '06 #11
Roberto Gori wrote:
Victor Bazarov wrote:
>I wasn't suggesting that you acquired (licensed) 'moc' from TrollTech.
But you can probably write your own, the tools to parse C++ source code
are all there, and there's probably plenty of free ones on the Web.

Many thanks Victor.
AI thought Trolltech's Moc system, itself, was Free as in Beer, and
that only the high-end Qt was payware. I could be wrong, but...

BAdding keywords to your language (that's what Moc does) is not
a healthy way to add variable arguments to your macro.

You could do this:

MACRO(target, (arg1, arg2, arg3, argN))

Then only one macro parameter can represent all the variable arguments, with
their ().

Next, you could answer my question about what problem you are trying to
solve. There could be a cleaner way to do it that doesn't need a macro.

(BTW: Add keywords to the language just so we can abuse a macro? There just
aren't words..!)

--
Phlip
http://c2.com/cgi/wiki?ZeekLand <-- NOT a blog!!!
Jul 31 '06 #12

"Phlip" <ph******@yahoo.comwrote in message
news:Kd*********************@newssvr21.news.prodig y.com...
Roberto Gori wrote:
>Victor Bazarov wrote:
>>I wasn't suggesting that you acquired (licensed) 'moc' from TrollTech.
But you can probably write your own, the tools to parse C++ source code
are all there, and there's probably plenty of free ones on the Web.

Many thanks Victor.

AI thought Trolltech's Moc system, itself, was Free as in Beer, and
that only the high-end Qt was payware. I could be wrong, but...

BAdding keywords to your language (that's what Moc does) is not
a healthy way to add variable arguments to your macro.
I agree with you but ...
>
You could do this:

MACRO(target, (arg1, arg2, arg3, argN))

Then only one macro parameter can represent all the variable arguments,
with their ().
.... this macro is able to generate (with all types and names):

foo(arg1, arg2, arg3, argN)

but not:

bar(name_of_arg1, name_of_arg2, name_of_arg3, name_of_argN);
>
Next, you could answer my question about what problem you are trying to
solve. There could be a cleaner way to do it that doesn't need a macro.
the problem is to generate a code like this:

void foo(int a, char b, void (*f)(int), double g[], float c=5)
{
bar(a, b, f, g, c);
}

starting from some function name (foo) and some arguments list (int a, char
b, void (*f)(int), double g[], float c=5)

Maybe your question is: why foo must invoke bar in this way, with the same
parameters?
Bacause i want to generate a class (the owner of foo) that support a typed
callback (bar).
>
(BTW: Add keywords to the language just so we can abuse a macro? There
just aren't words..!)

--
Phlip
http://c2.com/cgi/wiki?ZeekLand <-- NOT a blog!!!

Jul 31 '06 #13
Roberto Gori wrote:
the problem is to generate a code like this:
What is the _outer_ problem? You envision a solution. What is the problem
that solution might solve?
Maybe your question is: why foo must invoke bar in this way, with the same
parameters?
Bacause i want to generate a class (the owner of foo) that support a
typed callback (bar).
Please provide some pseudo-code showing this rig in use, with its callers.

--
Phlip
http://c2.com/cgi/wiki?ZeekLand <-- NOT a blog!!!
Jul 31 '06 #14

"Roberto Gori" <r.****@cineca.itwrote in message
news:ea**********@news.cineca.it...
>
Maybe your question is: why foo must invoke bar in this way, with the same
parameters?
Bacause i want to generate a class (the owner of foo) that support a
typed callback (bar).
Then perhaps what you want is some kind of dispatch mechanism?

For example, we have some software which has a single global callback
function, which receives a pointer to an instance of the class in question.
This calback simply calls a "dispatcher" member function of the class using
that instance pointer, so that we can manipulate the specific instance as
needed.

We also pass a pointer to a structure containing information about what we
want the object to actually do. It contains an integer (enum) code that
tells us what we want to do, followed by the data we want to work on. We
use a short array of float values, but you could use a string, or a vector
of floats, or a vector of "generic" objects (I think Boost has some kind of
generic object holder).

The dispatcher uses a switch statement to call a sepcific function, passing
it the parameters from our array which are appropriate for the function
being performed.

Just a thought...

-Howard

Jul 31 '06 #15

"Phlip" <ph******@yahoo.comwrote in message
news:iI*********************@newssvr21.news.prodig y.com...
Roberto Gori wrote:
>the problem is to generate a code like this:

What is the _outer_ problem? You envision a solution. What is the problem
that solution might solve?
>Maybe your question is: why foo must invoke bar in this way, with the
same parameters?
Bacause i want to generate a class (the owner of foo) that support a
typed callback (bar).

Please provide some pseudo-code showing this rig in use, with its callers.
class Observer
{
virtual void OnEvent(arglist)
{
//do something
}
}

class Event
{
Observer *obs;
void Notify(arglist) {
obs->OnEvent(arglist)
}
}

void main ()
{
Event e;
Observer o;

e.obs = &o;

//in some case someone calls
e.Notify(arglist);
}

to give this example i simplified all the object interfaces but my aim is to
have multiple events with different arglists.
--
Phlip
http://c2.com/cgi/wiki?ZeekLand <-- NOT a blog!!!


Jul 31 '06 #16

"Howard" <al*****@hotmail.comwrote in message
news:wP********************@bgtnsc04-news.ops.worldnet.att.net...
>
"Roberto Gori" <r.****@cineca.itwrote in message
news:ea**********@news.cineca.it...
>>
>Maybe your question is: why foo must invoke bar in this way, with the
same parameters?
Bacause i want to generate a class (the owner of foo) that support a
typed callback (bar).

Then perhaps what you want is some kind of dispatch mechanism?
Exactly Howard!
>
For example, we have some software which has a single global callback
function, which receives a pointer to an instance of the class in
question. This calback simply calls a "dispatcher" member function of the
class using that instance pointer, so that we can manipulate the specific
instance as needed.

We also pass a pointer to a structure containing information about what we
want the object to actually do. It contains an integer (enum) code that
tells us what we want to do, followed by the data we want to work on. We
use a short array of float values, but you could use a string, or a vector
of floats, or a vector of "generic" objects (I think Boost has some kind
of generic object holder).

The dispatcher uses a switch statement to call a sepcific function,
passing it the parameters from our array which are appropriate for the
function being performed.
I understand this method but i would like to avoid the packing/unpacking of
parameters because this could be unefficient and error prone.
Moreover i would like to preserve legacy code by inserting only the call to
the notification routine.

for example:

if i have a Foo class i would like to extend them in this way

class NewFoo: public EventNotifier
{
void SomeMethod( ...)
{
.....
NotifyEvent(val1, val2, ....);
.....
}
}

>
Just a thought...

-Howard

Jul 31 '06 #17
Roberto Gori wrote:
e.Notify(arglist);
}

to give this example i simplified all the object interfaces but my aim is
to have multiple events with different arglists.
So arglist is an object with a list of arguments inside it.

All GUIs use this pattern for their event queues. The raw event has a short
list of parameters, and custom events for advanced inputs, such as a list
box selection, have longer lists, such as the index of the selected item.

--
Phlip
http://c2.com/cgi/wiki?ZeekLand <-- NOT a blog!!!
Jul 31 '06 #18

"Phlip" <ph******@yahoo.comwrote in message
news:2O********************@newssvr29.news.prodigy .net...
Roberto Gori wrote:
>e.Notify(arglist);
}

to give this example i simplified all the object interfaces but my aim is
to have multiple events with different arglists.

So arglist is an object with a list of arguments inside it.
i would prefer arglist as a list of arguments and not an object because i
would like to reuse directly callbacks of a legacy code (like OnEvent(int x,
int y)) without packing/unpacking the parameters in some object/structure.
>
All GUIs use this pattern for their event queues. The raw event has a
short list of parameters, and custom events for advanced inputs, such as a
list box selection, have longer lists, such as the index of the selected
item.
>
--
Phlip
http://c2.com/cgi/wiki?ZeekLand <-- NOT a blog!!!

Jul 31 '06 #19
Roberto Gori wrote:
i would prefer arglist as a list of arguments and not an object because i
would like to reuse directly callbacks of a legacy code (like OnEvent(int
x, int y)) without packing/unpacking the parameters in some
object/structure.
If a legacy code had a poor design, I would work harder to fix that than to
adapt to it.

However, you can easily get your technique here:

http://www.codeproject.com/macro/metamacros.asp

--
Phlip
http://c2.com/cgi/wiki?ZeekLand <-- NOT a blog!!!
Aug 1 '06 #20

"Phlip" <ph******@yahoo.comwrote in message
news:25*************@newssvr14.news.prodigy.com...
Roberto Gori wrote:
>i would prefer arglist as a list of arguments and not an object because i
would like to reuse directly callbacks of a legacy code (like OnEvent(int
x, int y)) without packing/unpacking the parameters in some
object/structure.

If a legacy code had a poor design, I would work harder to fix that than
to adapt to it.

However, you can easily get your technique here:

http://www.codeproject.com/macro/metamacros.asp
i'm already faced to this kind of approach to link an enum to a vector of
strings but ...

could you give me an example on how to apply it to my case?

Are you thinking to something like this?

META(foo, bar, _m(type1) ident1, _m(type2) ident2, ...)

in this case is up to the developer to establish what's the type e what's
the identifier of the argument. Moreover for some types as the function
pointer type it's not simple to use that syntax without a typedef.
Since a complex system could contains a lot of events i would like to
generate automatically all the interfaces.
I would like to write in a text file something like that:

event_a, arg1_of_a, arg2_of_a, arg3_of_a
event_b, arg1_of_b, arg2_of_b
event_c, arg1_of_c, arg2_of_c, arg3_of_c, arg4_of_c

and for each declaration i would like to generate a header and a source
files (event_?.h event_a.cpp) containing the implementation of the
event/observer pattern for each event. The classes differ for the argument
list only.
--
Phlip
http://c2.com/cgi/wiki?ZeekLand <-- NOT a blog!!!


Aug 1 '06 #21
Roberto Gori wrote
the problem is to generate a code like this:

void foo(int a, char b, void (*f)(int), double g[], float c=5)
{
bar(a, b, f, g, c);
}
And what about a function template?

template <typename A,B,C,D,E>
void foo(A a, B b, C c, D d, E e)
{
bar (a,b,c,d,e);
}

should be typesafe and if you provide the same template with
zero,1,2,3... parameters you can pass anything. You can make these
templates out of a macro, or maybe some template guru knows how to do it
with metaprogramming.

Maybe have a look at libsigc++, which does something similiar, if I
understood it correctly, tom implement a GUI callback system for GTK.

Christian
Aug 3 '06 #22
Christian Gollwitzer wrote:
Roberto Gori wrote
>the problem is to generate a code like this:

void foo(int a, char b, void (*f)(int), double g[], float c=5)
{
bar(a, b, f, g, c);
}

And what about a function template?

template <typename A,B,C,D,E>
A nit picked:

template<typename A, typename B, typename C, typename D, typename E>
void foo(A a, B b, C c, D d, E e)
{
bar (a,b,c,d,e);
}

should be typesafe and if you provide the same template with
zero,1,2,3... parameters you can pass anything. You can make these
templates out of a macro, or maybe some template guru knows how to do
it with metaprogramming.
If you wrap it in a macro (that I suppose will have to be variadic anyway)
is that it will provide the compiler with way too many functions than
maybe needed (a template is an rather large number when only one was
intended). And if I wanted to make sure that conversions are involved,
I'd have to wrap it again in something.

But, of course, let the OP decide...
Maybe have a look at libsigc++, which does something similiar, if I
understood it correctly, tom implement a GUI callback system for GTK.
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask
Aug 3 '06 #23

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

Similar topics

16
by: Tran Tuan Anh | last post by:
Dear all: I need your advice on this matter. I am working on a program which takes some pieces of System-C code in and generate some other System-C code. (System-C code is just C++ with some...
9
by: Henk Verhoeven | last post by:
We are not alone! "Where other MDA tools are generating programmingcode, Codeless chooses not to generate code at all". OK, phpPeanuts is not an MDA tool (it has no fancy modeling GUI). But it...
4
by: Stephen | last post by:
I need to generate input XML for another application by serialising classes defined in an XSD document. The code below will generate the XML I require but I need to generate this in memory rather...
29
by: Lauren Wilson | last post by:
Does anyone know how the following info is extracted from the user's computer by a Front Page form? HTTP User Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20041107...
8
by: Thomas Stegen | last post by:
I have written a code generator. To be more specific it is a code generator generator. As in a generator that generates code generators. If you run the generator on its own source code you get a...
2
by: Henry | last post by:
Hi, How can I generate an eight digit random? Can I use the staff name to generate it? May I ask is there any sample c# code to see? Thanks
4
by: Chris Bower | last post by:
Reposted from aspnet.buildingcontrols: Ok, I've got a bunch of derived controls that all have a property Rights of type Rights (Rights is an Enumerator). I wrote a custom TypeConverter so that I...
1
by: A Traveler | last post by:
Hello, i am having this problem. The exact error message is: "Unable to generate code for a value of type 'System.Web.UI.Page'. This error occurred while trying to generate the property value for...
8
by: Bill Rust | last post by:
I've created an "Add Item" wizard for VB.NET 2003 that allows a user to add a specialized class that works with my application framework. In the wizard, the user can select the interfaces they...
3
by: joshblair | last post by:
Hello, Has anyone ever seen or created such a code generator? I'm looking for a sample of a code generator that will generate code (preferably one that uses C# and the XMLTextWriter) to create...
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
0
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,...
0
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,...
0
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...
0
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...
0
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...
0
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...
0
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...

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.