473,722 Members | 2,295 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

previous declaration of Table was here / conflicting types for

Anyone who can help:

Given a Table.h file I am writing a Table.c file.
I keep getting the compile error:

previous declaration of Table was here / conflicting types for
I think the problem was the result of two pieces of code.
First: typedef struct Table; /* in Table.c*/
Second: struct Table { /*struct definition */ } *Table; /* in
Table.h */

How can I solve the problems?

Here are the two files
/* * * * * * * * * * * * * * * * * * * * * * *
Header file:
* * * * * * * * * * * * * * * * * * * * * * */
#ifndef TABLE_H
#define TABLE_H
#include "bool.h"

typedef void * Table ;
typedef void * DataT ;

typedef struct {
// unsigned successful ; double unsuccessful ;
unsigned successfulNumer ator , successfulDenom inator ;
unsigned unsuccessfulNum erator , unsuccessfulDen ominator ;
} Perform ;

Table
makeTable ( int sizeTable , unsigned sizeData , int (*diff)() ,
unsigned (*hash)() , void * (*copy)() , void (*free)() ) ;
#endif

/* * * * * * * * * * * * * * * * * * * * * * *
Table.c
* * * * * * * * * * * * * * * * * * * * * * */

#include "Table.h"
typedef struct Table{
int sizeTable;
unsigned sizeData;
int (*diff)();
unsigned (*hash)();
void *(*copy)();
void (*free)();
} * Table;

Table
makeTable ( int sizeTable , unsigned sizeData , int (*diff)() ,
unsigned (*hash)() , void * (*copy)() , void (*free)() ) {
}
Jun 27 '08 #1
12 9131
Michael.Z wrote:
Anyone who can help:

Given a Table.h file I am writing a Table.c file.
I keep getting the compile error:

previous declaration of Table was here / conflicting types for
#ifndef TABLE_H
#define TABLE_H

#include "bool.h"

typedef void * Table ;
You have it here, ...

[snip]
/* * * * * * * * * * * * * * * * * * * * * * *
Table.c
* * * * * * * * * * * * * * * * * * * * * * */

#include "Table.h"
typedef struct Table{
int sizeTable;
unsigned sizeData;
int (*diff)();
unsigned (*hash)();
void *(*copy)();
void (*free)();
} * Table;
And you also have it here.

In Table.h, you make Table a typedef of void *, and in Table.c, you make
Table a typedef of struct Table { ... } *.
Jun 27 '08 #2
Michael.Z wrote, On 03/05/08 08:22:
Anyone who can help:

Given a Table.h file I am writing a Table.c file.
I keep getting the compile error:

previous declaration of Table was here / conflicting types for
I think the problem was the result of two pieces of code.
First: typedef struct Table; /* in Table.c*/
This says that Table is a struct.
Second: struct Table { /*struct definition */ } *Table; /* in
Table.h */
This says it is a pointer to a struct, that is what the * means.
How can I solve the problems?
By not providing different definitions.
Here are the two files
<snip>
typedef void * Table ;
This is not what you said you had and is defining table as yet another type.

<snip>
typedef struct Table{
int sizeTable;
unsigned sizeData;
int (*diff)();
unsigned (*hash)();
void *(*copy)();
void (*free)();
} * Table;

This is what you said. However pointers to void and pointers to structs
are different things for the simple reason that void and struct are
different.

Also hiding pointers behind a typedef is generally considered a bad thing.
--
Flash Gordon
Jun 27 '08 #3
Hi Flash Gordon:

Thanks for your reply.
The Table.c was required to be implemented as generic type. If I am
right, Table is declared as void * in header file, the reason is that,
when used later on, it can be casted to any other type of pointers.

The implementation of Table in Table.c was defined as pointer to
struct Table, because I need to implement the members of Table.

My professor told us, void * in header indicates a generic type.
He has some sample codes where List was typedef'd void pointer but the
definition was struct List Pointer:

/* Header file List.h*/
#ifndef LIST_H
#define LIST_H

#include "bool.h"

typedef void * List ;
typedef void * DataL ;
typedef void * ListIt ;

List makeList ( int , void * (*copy)() , void (*free)() ) ;
void freeList ( List ) ;
void clearList ( List ) ;

boolean accessList ( List , DataL , int ) ;
int lengthList ( List ) ;

boolean accessHead ( List , DataL ) ;
boolean insertHead ( List , DataL ) ;
boolean deleteHead ( List , DataL ) ;

/* not all the header file is copied here*/



/* List.c */

#include "bool.h"
#include <stdio.h>
#include <stdlib.h>

#ifndef DATA
#define DATA
typedef void * Data ;
#endif

typedef struct ListNode {
struct ListNode * next ; /* reference to following ListNode */
struct ListNode * previous ; /* reference to preceding ListNode */
Data dptr ;
} ListNode ;

typedef struct List {
ListNode * head ; /* Head end of List */
ListNode * tail ; /* Tail end of List */
int _lengthList ; /* number of items within List */
int _sizeData ; /* byte size of data to be stored */
void (*_freeData)( ) ; /* returns data item to heap */
void * (*_copyData)( ) ; /* copies data item to another */
} * List ;
Regards
Michael


On May 3, 2:32 am, Flash Gordon <s...@flash-gordon.me.ukwro te:
Michael.Z wrote, On 03/05/08 08:22:
Anyone who can help:
Given a Table.h file I am writing a Table.c file.
I keep getting the compile error:
previous declaration of Table was here / conflicting types for
I think the problem was the result of two pieces of code.
First:typedefst ruct Table; /* in Table.c*/

This says that Table is a struct.
Second: struct Table { /*struct definition */ } *Table; /* in
Table.h */

This says it is a pointer to a struct, that is what the * means.
How can I solve the problems?

By not providing different definitions.
Here are the two files

<snip>
typedefvoid * Table ;

This is not what you said you had and is defining table as yet another type.

<snip>
typedefstruct Table{
int sizeTable;
unsigned sizeData;
int (*diff)();
unsigned (*hash)();
void *(*copy)();
void (*free)();
} * Table;

This is what you said. However pointers to void and pointers to structs
are different things for the simple reason that void and struct are
different.

Also hiding pointers behind atypedefis generally considered a bad thing.
--
Flash Gordon
Jun 27 '08 #4
On 6 May, 03:33, "Michael.Z" <zhangqiuy...@g mail.comwrote:
Hi Flash Gordon:
The Table.c was required to be implemented as generic type.
I'm not sure what a "generic type" is and I have been programming
for quite a while.
>*If I am
right, Table is declared as void * in header file, the reason is that,
when used later on, it can be casted to any other type of pointers.
It may be you trying to hide implementation details from users
of your code. The outside world uses a void* and your
code (the library) casts it to the right type before use.
This is good. The internal data structure can change
without causing a recompile of the user code.

/* pippo.h */
typedef void* Table_handle;
Table_handle create();
void befunge (Table_handle);

/* pippo.c */
void befunge (Table_handle handle)
{
Table* table = (Table*)handle;
...
}

/* user.c */
int main (void)
{
Table_handle* my_table;
my_table = create();
befunge(my_tabl e);
return 0;
}

The point is I *don't* try and have two differing
definitions of Table.

The implementation of Table in Table.c was defined as pointer to
struct Table, because I need to implement the members of Table.

My professor told us, void * in header indicates a generic type.
He has some sample codes where List was typedef'd void pointer but the
definition was struct List Pointer:
so he had two different types didn't he?

/* Header file List.h*/
#ifndef LIST_H
#define LIST_H

#include "bool.h"

* * * * typedef void * List ;
* * * * typedef void * DataL ;
* * * * typedef void * ListIt ;

* * * * List makeList ( int , void * (*copy)() , void (*free)() ) ;
* * * * void freeList ( List ) ;
* * * * void clearList ( List ) ;

* * * * boolean accessList ( List , DataL , int ) ;
* * * * int lengthList ( List ) ;

* * * * boolean accessHead ( List , DataL ) ;
* * * * boolean insertHead ( List , DataL ) ;
* * * * boolean deleteHead ( List , DataL ) ;

* * */* not all the header file is copied here*/

/* List.c */

#include "bool.h"
#include <stdio.h>
#include <stdlib.h>

#ifndef DATA
#define DATA
typedef void * Data ;
#endif

typedef struct ListNode {
* * * * struct ListNode * next ; * * * */* reference to following ListNode */
* * * * struct ListNode * previous ; * */* reference to preceding ListNode */
* * * * Data dptr ;

} ListNode ;

typedef struct List {
* * * * ListNode * head ; * * * * * * * /* Head end of List * * * * * * */
* * * * ListNode * tail ; * * * * * * * /* Tail end of List * * * * * * */
* * * * int _lengthList ; * * * * * * * /* number ofitems within List **/
* * * * int _sizeData ; * * * * * * * * /* byte size of data to be stored */
* * * * void (*_freeData)( ) ; * * * * */* returns data item to heap * **/
* * * * void * (*_copyData)( ) ; * * * */* copies data item to another **/

} * List ;
arg!!!

don't top post. Please put your reply after the text you are
replying to.

On May 3, 2:32 am, Flash Gordon <s...@flash-gordon.me.ukwro te:
Michael.Z wrote, On 03/05/08 08:22:
Anyone who can help:
Given a Table.h file I am writing a Table.c file.
I keep getting the compile error:
previous declaration of Table was here / *conflicting types for
I think the problem was the result of two pieces of code.
First:typedefst ruct Table; */* in Table.c*/
This says that Table is a struct.
Second: struct Table { /*struct definition */ } **Table; */* in
Table.h */
This says it is a pointer to a struct, that is what the * means.
How can I solve the problems?
By not providing different definitions.
Here are the two files
<snip>
>typedefvoid * Table ;
This is not what you said you had and is defining table as yet another type.
<snip>
>typedefstruc t Table{
* * int sizeTable;
* * unsigned sizeData;
* * int (*diff)();
* * unsigned (*hash)();
* * void *(*copy)();
* * void (*free)();
} * Table;
This is what you said. However pointers to void and pointers to structs
are different things for the simple reason that void and struct are
different.
Also hiding pointers behind atypedefis generally considered a bad thing.
--
Flash Gordon-
don't quote sigs (the bit after the "-- ")
--
Nick Keighley


Jun 27 '08 #5
"Michael.Z" <zh**********@g mail.comwrites:
The Table.c was required to be implemented as generic type. If I am
right, Table is declared as void * in header file, the reason is that,
when used later on, it can be casted to any other type of pointers.

The implementation of Table in Table.c was defined as pointer to
struct Table, because I need to implement the members of Table.

My professor told us, void * in header indicates a generic type.
He has some sample codes where List was typedef'd void pointer but the
definition was struct List Pointer:
First, the more common way to "hide the implementation" is simply to
declare your functions as using a 'struct Table *' (as has already
been explained by Flash Gordon).

Secondly, this does not stop you writing generic functions that have a
'void *' parameter. You can pass a 'struct Table *' where a 'void *'
is expected when is important to do so.

There is no obvious advantage to making the Table generic (in that
sense) rather than simply hidden. In fact there is a positive
*disadvantage* to doing that -- you loose all the type-checking. It
is usually much better to stick with hidden (incomplete) struct
pointers right up to the point where you are *forced* to start using
'void *'.

Your professor may have a reason for doing this, but it does seem like
a wise choice from the sample you posted.

--
Ben.
Jun 27 '08 #6
On May 6, 1:21 am, Nick Keighley <nick_keighley_ nos...@hotmail. com>
wrote:
On 6 May, 03:33, "Michael.Z" <zhangqiuy...@g mail.comwrote:
Hi Flash Gordon:
The Table.c was required to be implemented as generic type.

I'm not sure what a "generic type" is and I have been programming
for quite a while.
If I am
right, Table is declared as void * in header file, the reason is that,
when used later on, it can be casted to any other type of pointers.

It may be you trying to hide implementation details from users
of your code. The outside world uses a void* and your
code (the library) casts it to the right type before use.
This is good. The internal data structure can change
without causing a recompile of the user code.

/* pippo.h */typedefvoid* Table_handle;
Table_handle create();
void befunge (Table_handle);

/* pippo.c */
void befunge (Table_handle handle)
{
Table* table = (Table*)handle;
...

}

/* user.c */
int main (void)
{
Table_handle* my_table;
my_table = create();
befunge(my_tabl e);
return 0;

}

The point is I *don't* try and have two differing
definitions of Table.
The implementation of Table in Table.c was defined as pointer to
struct Table, because I need to implement the members of Table.
My professor told us, void * in header indicates a generic type.
He has some sample codes where List wastypedef'd void pointer but the
definition was struct List Pointer:

so he had two different types didn't he?
/* Header file List.h*/
#ifndef LIST_H
#define LIST_H
#include "bool.h"
typedefvoid * List ;
typedefvoid * DataL ;
typedefvoid * ListIt ;
List makeList ( int , void * (*copy)() , void (*free)() ) ;
void freeList ( List ) ;
void clearList ( List ) ;
boolean accessList ( List , DataL , int ) ;
int lengthList ( List ) ;
boolean accessHead ( List , DataL ) ;
boolean insertHead ( List , DataL ) ;
boolean deleteHead ( List , DataL ) ;
/* not all the header file is copied here*/
/* List.c */
#include "bool.h"
#include <stdio.h>
#include <stdlib.h>
#ifndef DATA
#define DATA
typedefvoid * Data ;
#endif
typedefstruct ListNode {
struct ListNode * next ; /* reference to following ListNode */
struct ListNode * previous ; /* reference to preceding ListNode */
Data dptr ;
} ListNode ;
typedefstruct List {
ListNode * head ; /* Head end of List */
ListNode * tail ; /* Tail end of List */
int _lengthList ; /* number of items within List */
int _sizeData ; /* byte size of data to be stored */
void (*_freeData)( ) ; /* returns data item to heap */
void * (*_copyData)( ) ; /* copies data item to another */
} * List ;

arg!!!

don't top post. Please put your reply after the text you are
replying to.
On May 3, 2:32 am, Flash Gordon <s...@flash-gordon.me.ukwro te:
Michael.Z wrote, On 03/05/08 08:22:
Anyone who can help:
Given a Table.h file I am writing a Table.c file.
I keep getting the compile error:
previous declaration of Table was here / conflicting types for
I think the problem was the result of two pieces of code.
First:typedefst ruct Table; /* in Table.c*/
This says that Table is a struct.
Second: struct Table { /*struct definition */ } *Table; /* in
Table.h */
This says it is a pointer to a struct, that is what the * means.
How can I solve the problems?
By not providing different definitions.
Here are the two files
<snip>
typedefvoid * Table ;
This is not what you said you had and is defining table as yet another type.
<snip>
typedefstruct Table{
int sizeTable;
unsigned sizeData;
int (*diff)();
unsigned (*hash)();
void *(*copy)();
void (*free)();
} * Table;
This is what you said. However pointers to void and pointers to structs
are different things for the simple reason that void and struct are
different.
Also hiding pointers behind atypedefis generally considered a bad thing.
--
Flash Gordon-

don't quote sigs (the bit after the "-- ")
Hi Nick,

Thanks so much for your reply and your advice for not top posting and
not quote signature, I am new to this, let me know if I need more
further improvements.

Regarding to your post:
>
so he had two different types didn't he?

He did have two different types. Its "void *" in header file while
"struct List *" in List.c;
eg.
/*List.h*/
typedef void *List;

/*List.c*/
typedef struct List{....} *List;

However there was no conflicting type error, the reason is he did not
include file "List.h" in his "List.c".

So I removed #include "Table.h" from my "Table.c", it complied well.
Regards.
Michel Zhang
Jun 27 '08 #7
"Michael.Z" wrote:
Nick Keighley <nick_keighley_ nos...@hotmail. comwrote:
.... snip ...
>
>don't top post. Please put your reply after the text you are
replying to.
.... snip ...
>>
don't quote sigs (the bit after the "-- ")

Thanks so much for your reply and your advice for not top posting
and not quote signature, I am new to this, let me know if I need
more further improvements.
Please also learn to snip. Notice how this has removed anything
not connected with my reply, and marked the snipped areas. Your
answer belongs after (or intermixed with) the quoted material to
which you reply, after snipping all irrelevant material. See the
following links:

<http://www.catb.org/~esr/faqs/smart-questions.html>
<http://www.caliburn.nl/topposting.html >
<http://www.netmeister. org/news/learn2quote.htm l>
<http://cfaj.freeshell. org/google/ (taming google)
<http://members.fortune city.com/nnqweb/ (newusers)

--
[mail]: Chuck F (cbfalconer at maineline dot net)
[page]: <http://cbfalconer.home .att.net>
Try the download section.
** Posted from http://www.teranews.com **
Jun 27 '08 #8
Michael.Z wrote, On 07/05/08 09:05:
On May 6, 1:21 am, Nick Keighley <nick_keighley_ nos...@hotmail. com>
wrote:
<snip>
Regarding to your post:
>so he had two different types didn't he?

He did have two different types. Its "void *" in header file while
"struct List *" in List.c;
eg.
/*List.h*/
typedef void *List;

/*List.c*/
typedef struct List{....} *List;
In that case what he provided was wrong. No ifs, not buts, it is just
plain wrong. Wrong as in the definition of the language says that it is
wrong.
However there was no conflicting type error,
The error is still there, it is just hidden from the compiler so that it
does not tell you about it. It is no more correct than driver the wrong
way up a one way street at 100mph is legal if you do not get caught. Not
being caught does not make it legal.
the reason is he did not
include file "List.h" in his "List.c".
That, whilst not forbidden by the language, is generally considered to
be bad practice. The reason it is considered to be bad practice is
specifically *because* it hides errors like this.
So I removed #include "Table.h" from my "Table.c", it complied well.
Compiling does not make it correct. If you have a good relationship with
your tutor/lecturer/teacher you should explain to your lecturer that his
code is wrong. If your relationship is not good enough to get away with
that you should ask him why it fails to compile if the header file is
not included (but avoid arguing the point if it will affect your
grades). In either case, you should take any code presented with at
least a pinch of salt, and if he does not understand the problem you
should take the entire course with a whole keg of salt as what you are
being taught is wrong.
--
Flash Gordon
Jun 27 '08 #9
[snip: On May 6, 3:32 am, Ben Bacarisse <ben.use...@bsb .me.ukwrote:
"Michael.Z" <zhangqiuy...@g mail.comwrites:
The Table.c was required to be implemented as generic type. If I am
right, Table is declared as void * in header file, the reason is that,
when used later on, it can be casted to any other type of pointers.
The implementation of Table in Table.c was defined as pointer to
struct Table, because I need to implement the members of Table.
]
My professor told us, void * in header indicates a generic type.
He has some sample codes where List wastypedef'd void pointer but the
definition was struct List Pointer:

First, the more common way to "hide the implementation" is simply to
declare your functions as using a 'struct Table *' (as has already
been explained by Flash Gordon).

Secondly, this does not stop you writing generic functions that have a
'void *' parameter. You can pass a 'struct Table *' where a 'void *'
is expected when is important to do so.
I just want to make sure I got you right.You are suggesting:
typedef struct Table{ ...} Table;
Table * makeTable( void* size, void * data);
There is no obvious advantage to making the Table generic (in that
sense) rather than simply hidden. In fact there is a positive
*disadvantage* to doing that -- you loose all the type-checking. It
I don't quit understand this part.
"generic(in that sense)": refers to what I said about my professors
way.
vs
"simply hidden": the above example. Table * makeTable( void* size,
void * data);
is usually much better to stick with hidden (incomplete) struct
pointers right up to the point where you are *forced* to start using
'void *'.

an example of being *forced* would be:

void useTable(*void myTable){
Table * makeTable = (Table *)myTable;

}

if my example is not right, any chance you can give me correct one?
>
Your professor may have a reason for doing this, but it does seem like
a wise choice from the sample you posted.

--
Ben.
"
Jun 27 '08 #10

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

Similar topics

10
2659
by: Christopher Benson-Manica | last post by:
Why can't I use a class destructor in a using declaration: using MyClass::~MyClass; ? -- Christopher Benson-Manica | I *should* know what I'm talking about - if I ataru(at)cyberspace.org | don't, I need to know. Flames welcome.
2
3986
by: humble04 | last post by:
Hi, I am compiling a collection of C++ code. Most of them are using the new format #include <iostream>. I think all of them because I failed at finding out which header file uses the old format #include <iostream.h>. However, I met the following error messages. "/usr/vacpp/include/iostream.h", line 74.7: 1540-0400 (S) "class ostream" has a conflicting declaration "../include/myfile.h", line 7.1: 1540-0424 (I) "ostream" is declared on
2
4516
by: Plok Plokowitsch | last post by:
After over a decade of programming in C++ I seem to have missed some substantial point (mental note: am I getting too old for this?). A little bit of help would be *very* appreciated. I'm trying to gather various different classes into a common namespace using typedefs: class QWidget {}; class MyListview {}; namespace gui
6
7993
by: Daniel Nichols | last post by:
I've noticed that in a C module (.c, .h file combination) that if you create a function's definition before it is used in other functions than a declaration is not necessary. I believe if the compiler can find the definition of the function prior to encountering the use of the function it will generate the prototype itself. I don't currently use this feature, I explicitly create declarations for all functions in a header file. However, I...
8
9303
by: Lathe_Biosas | last post by:
Hi While compiling my application that needs "windows.h" there are some typedef redefinition errors redefinition at winnt.h( line 207) typedef void *HANDLE redefinition at windef.h( line 143) typedef unsigned char BYTE redefinition at windef.h( line 141) typedef unsigned long DWORD #define INVALID_HANDLE_VALUE -1 redefinition at winbase.h(55) #define
11
3915
by: alex sparsky | last post by:
I have a rather unique problem that I need some advice on. I have multiple c# controls that need to make use of a common namespace. So when I go to include both controls that make use of that common namespace and one control has a newer version of that namespace, the compiler complains about ambiguous references. I've tried using compiler directives to manipulate the namespaces to be different at compile time but vs.net 2005 keeps...
3
3358
by: eBob.com | last post by:
I've done a lot of programming but very little OOP. Would someone be kind enough to explain to me why I get a "declaration expected" on this statement: anythingarray(0) = new anything(3) Thanks, Bob Public Class Form1 Inherits System.Windows.Forms.Form
11
2614
by: Martin Eisenberg | last post by:
Hi Antoine, just redirecting you... Antoine Trux wrote: > Hi, > > Is the following code legal: > > ------> code starts here <------ > #include <stddef.h>
18
9119
by: Ehud Shapira | last post by:
Is it possible to have a declaration of a struct pointer initialized to an unnamed struct? (I'm only concerned with static/global variables, if it matters.) I'm trying to do something like: struct st_a { int i, j; };
0
8863
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
9238
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
9157
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
9088
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...
0
8052
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing, and deployment—without human intervention. Imagine an AI that can take a project description, break it down, write the code, debug it, and then launch it, all on its own.... Now, this would greatly impact the work of software developers. The idea...
1
6681
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
5995
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
4762
by: adsilva | last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
3
2147
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 effective websites that not only look great but also perform exceptionally well. In this comprehensive...

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.