473,803 Members | 3,833 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

getting rid of dependency of default values

I am trying to learn RAII and some template techniques by writer a
smarter pointer class to manage the resource management. Since I find
that a lot of the resource management is kinda the same, I try to mimic
some other examples outther then tailor to my needs. My case is for
windows handle like hkey, dll library, file handle, etc. But the code
largely uses standard C++. Only the Clean up action, I put windows api
call in there.
In general, I want to archieve one thing: the template will instantiate
when I give it the inpout type, then call the CloseResource eventually
to clean up on exit of scope.

But I have a hard time to make the class to find out what the
NULL_VALUE is. NULL_VALUE is a value that depends on the type. or is
this a worthwhile effort to get rid of that dependency?I defaulted
evertyhing to NULL now but not all type will default to NULL, if I take
extendsibility into account.

Also I notice I end up with a lot of small policy classes. Is there a
way to reduce that number? Because all it depends is the windows API
call. I think I am asking somethign circular here. Thanks. See below
for code:

For the release policy code:
#include <windows.h>

template <typename hType>
struct RegistryPolicy{
void CloseResource(h Type& h){
::RegCloseKey(h );
h=NULL; //?
};

protected: // do I need these or delete those? they are compiler
generated anyway
RegistryPolicy( ){};
~RegistryPolicy (){};
private:
RegistryPolicy( RegistryPolicy& );
RegistryPolicy& operator=(Regis tryPolicy&);
};

template <typename hType>
struct LibraryPolicy{
void CloseResource(h Type& h){
::FreeLibrary(h );
h=NULL; //?
};
protected:
LibraryPolicy() {};
~LibraryPolicy( ){};
private:
explicit LibraryPolicy(L ibraryPolicy&);
LibraryPolicy& operator=(Libra ryPolicy&);
};
template <typename hType>
struct CloseViewOfFile {
void CloseResource(h Type& h){
::UnmapViewOfFi le(h);
h=NULL; //?
};
protected:
explicit CloseViewOfFile (){};
~CloseViewOfFil e(){};
private:
CloseViewOfFile (CloseViewOfFil e&);
CloseViewOfFile & operator=(Close ViewOfFile&);

};
///////////////////////////// my smarter pointer code in below
//////////////////////////////
template <class T>
void DestroyObject(T object) {object->Destroy();}

template <class T>
void DesposeObject(T object) {object->CloseResource( );}

//
//

template <typename hType,
template<typena meclass ReleasePolicy=D eposeObject,
hType NULL_VALUE=NULL //how to generalize NULL_VALUE? make it
get the value depending on the type?
class SmarterHolder{
private:
hType mhandle;

void CleanUp(){
if (NULL_VALUE!= mhandle)
{
ReleasePolicy(m handle);
mhandle = NULL_VALUE;
}
}
hType operator=(hType );
SmarterHolder(S marterHolder&);

public:
explicit SmarterHolder() :mhandle(NULL_V ALUE){};
explicit SmarterHolder(h Type h): mhandle(h){};
~SmarterHolder( ){ ReleasePolicy() ; };
operator hType () const { return mhandle; }
bool IsValidHandle() const { return NULL_VALUE != mhandle; }

};
#endif

Sep 26 '06 #1
5 2035
as*********@gma il.com wrote:
I am trying to learn RAII and some template techniques by writer a
smarter pointer class to manage the resource management. Since I find
that a lot of the resource management is kinda the same, I try to mimic
some other examples outther then tailor to my needs. My case is for
windows handle like hkey, dll library, file handle, etc. But the code
largely uses standard C++. Only the Clean up action, I put windows api
call in there.
In general, I want to archieve one thing: the template will instantiate
when I give it the inpout type, then call the CloseResource eventually
to clean up on exit of scope.

But I have a hard time to make the class to find out what the
NULL_VALUE is. NULL_VALUE is a value that depends on the type. or is
this a worthwhile effort to get rid of that dependency?I defaulted
evertyhing to NULL now but not all type will default to NULL, if I take
extendsibility into account.
See below.
Also I notice I end up with a lot of small policy classes. Is there a
way to reduce that number? Because all it depends is the windows API
call. I think I am asking somethign circular here.
Some existing implementations of smart pointers (e.g.,
std::tr1::share d_ptr aka boost::shared_p tr) accept a deleter argument.
That would suffice in a case such as this:

struct SomeHandle { /*...*/ };
SomeHandle* GetResource();
void FreeResource( SomeHandle* );

std::tr1::share d_ptr<SomeHandl ehandle(
GetResource(), FreeResource );

You could also use boost::bind or boost::lambda to reduce the number of
simple policies (probably not a good idea if they are used more than
once).
For the release policy code:
#include <windows.h>

template <typename hType>
struct RegistryPolicy{
void CloseResource(h Type& h){
::RegCloseKey(h );
h=NULL; //?
Setting to NULL is probably unnecessary if you're using smart pointers
since the smart pointer is entirely responsible for the resource and
will only call on the release policy when the item is being destroyed
(either on destruction or reset).
};
Semicolons are not necessary after function definitions. You should
also make this function static since there is no member data in play
here.
>
protected: // do I need these or delete those? they are compiler
generated anyway
RegistryPolicy( ){};
~RegistryPolicy (){};
They would be generated public by default. You must define them
yourself to override that.
private:
RegistryPolicy( RegistryPolicy& );
RegistryPolicy& operator=(Regis tryPolicy&);
The function parameter should be const in both cases.
};

template <typename hType>
struct LibraryPolicy{
void CloseResource(h Type& h){
::FreeLibrary(h );
h=NULL; //?
};
protected:
LibraryPolicy() {};
~LibraryPolicy( ){};
private:
explicit LibraryPolicy(L ibraryPolicy&);
LibraryPolicy& operator=(Libra ryPolicy&);
};
template <typename hType>
struct CloseViewOfFile {
void CloseResource(h Type& h){
::UnmapViewOfFi le(h);
h=NULL; //?
};
protected:
explicit CloseViewOfFile (){};
~CloseViewOfFil e(){};
private:
CloseViewOfFile (CloseViewOfFil e&);
CloseViewOfFile & operator=(Close ViewOfFile&);

};
///////////////////////////// my smarter pointer code in below
//////////////////////////////
template <class T>
void DestroyObject(T object) {object->Destroy();}

template <class T>
void DesposeObject(T object) {object->CloseResource( );}
Dispose?
>
//
//

template <typename hType,
template<typena meclass ReleasePolicy=D eposeObject,
DisposeObject?
hType NULL_VALUE=NULL >//how to generalize NULL_VALUE? makeit
get the value depending on the type?
Use the default value of hType:

template
<
typename hType,
template<typena meclass ReleasePolicy=D isposeObject,
hType NULL_VALUE=hTyp e()
>
class SmartHolder;
class SmarterHolder{
private:
hType mhandle;

void CleanUp(){
if (NULL_VALUE!= mhandle)
{
ReleasePolicy(m handle);
mhandle = NULL_VALUE;
}
}
hType operator=(hType );
SmarterHolder(S marterHolder&);

public:
explicit SmarterHolder() :mhandle(NULL_V ALUE){};
explicit SmarterHolder(h Type h): mhandle(h){};
~SmarterHolder( ){ ReleasePolicy() ; };
operator hType () const { return mhandle; }
bool IsValidHandle() const { return NULL_VALUE != mhandle; }
};
#endif
I'd suggest that, rather than rolling your own, you should switch to
using a tried-and-true RAII mechanism like std::tr1::/boost::shared_p tr
(where you would supply a custom deleter) or even Loki::SmartPtr (where
you would supply a storage policy). No need to reinvent the wheel.

Cheers! --M

Sep 26 '06 #2
Hi, thanks for your feedback. I learnt quite something by reading your
reply. The reason of making this is an exercise for me to learn more on
using template. My C++ is kinda shaky after 4 yrs of idle.
In reply to DisposeObject below. What I intended as to let
SmarterHandle to call the the "Policy template class" such that, the
call will dispatch to the appropriate CleanResource. The idea was to
let the function template DisposeObject right above smarterhandle, then
which in turn defer to the policy class. I note that all the example I
see on theweb have SmarterHandle to inherit from ReleasePolicy to get
access to
CloseResource. But I just don't get why it has to inherit. so instead I
just try to do a usage here. But I can see there is something not going
right with my current arrangement. Can you help me a bit on that. I
don't think my C++ skills is good enough to concretly pinpoint that.
Thanks
mlimber wrote:
as*********@gma il.com wrote:
I am trying to learn RAII and some template techniques by writer a
smarter pointer class to manage the resource management. Since I find
that a lot of the resource management is kinda the same, I try to mimic
some other examples outther then tailor to my needs. My case is for
windows handle like hkey, dll library, file handle, etc. But the code
largely uses standard C++. Only the Clean up action, I put windows api
call in there.
In general, I want to archieve one thing: the template will instantiate
when I give it the inpout type, then call the CloseResource eventually
to clean up on exit of scope.

But I have a hard time to make the class to find out what the
NULL_VALUE is. NULL_VALUE is a value that depends on the type. or is
this a worthwhile effort to get rid of that dependency?I defaulted
evertyhing to NULL now but not all type will default to NULL, if I take
extendsibility into account.

See below.
Also I notice I end up with a lot of small policy classes. Is there a
way to reduce that number? Because all it depends is the windows API
call. I think I am asking somethign circular here.

Some existing implementations of smart pointers (e.g.,
std::tr1::share d_ptr aka boost::shared_p tr) accept a deleter argument.
That would suffice in a case such as this:

struct SomeHandle { /*...*/ };
SomeHandle* GetResource();
void FreeResource( SomeHandle* );

std::tr1::share d_ptr<SomeHandl ehandle(
GetResource(), FreeResource );

You could also use boost::bind or boost::lambda to reduce the number of
simple policies (probably not a good idea if they are used more than
once).
For the release policy code:
#include <windows.h>

template <typename hType>
struct RegistryPolicy{
void CloseResource(h Type& h){
::RegCloseKey(h );
h=NULL; //?

Setting to NULL is probably unnecessary if you're using smart pointers
since the smart pointer is entirely responsible for the resource and
will only call on the release policy when the item is being destroyed
(either on destruction or reset).
};

Semicolons are not necessary after function definitions. You should
also make this function static since there is no member data in play
here.

protected: // do I need these or delete those? they are compiler
generated anyway
RegistryPolicy( ){};
~RegistryPolicy (){};

They would be generated public by default. You must define them
yourself to override that.
private:
RegistryPolicy( RegistryPolicy& );
RegistryPolicy& operator=(Regis tryPolicy&);

The function parameter should be const in both cases.
};

template <typename hType>
struct LibraryPolicy{
void CloseResource(h Type& h){
::FreeLibrary(h );
h=NULL; //?
};
protected:
LibraryPolicy() {};
~LibraryPolicy( ){};
private:
explicit LibraryPolicy(L ibraryPolicy&);
LibraryPolicy& operator=(Libra ryPolicy&);
};
template <typename hType>
struct CloseViewOfFile {
void CloseResource(h Type& h){
::UnmapViewOfFi le(h);
h=NULL; //?
};
protected:
explicit CloseViewOfFile (){};
~CloseViewOfFil e(){};
private:
CloseViewOfFile (CloseViewOfFil e&);
CloseViewOfFile & operator=(Close ViewOfFile&);

};
///////////////////////////// my smarter pointer code in below
//////////////////////////////
template <class T>
void DestroyObject(T object) {object->Destroy();}

template <class T>
void DesposeObject(T object) {object->CloseResource( );}

Dispose?

//
//

template <typename hType,
template<typena meclass ReleasePolicy=D eposeObject,

DisposeObject?
hType NULL_VALUE=NULL >//how to generalize NULL_VALUE? makeit
get the value depending on the type?

Use the default value of hType:

template
<
typename hType,
template<typena meclass ReleasePolicy=D isposeObject,
hType NULL_VALUE=hTyp e()
>
class SmartHolder;
class SmarterHolder{
private:
hType mhandle;

void CleanUp(){
if (NULL_VALUE!= mhandle)
{
ReleasePolicy(m handle);
mhandle = NULL_VALUE;
}
}
hType operator=(hType );
SmarterHolder(S marterHolder&);

public:
explicit SmarterHolder() :mhandle(NULL_V ALUE){};
explicit SmarterHolder(h Type h): mhandle(h){};
~SmarterHolder( ){ ReleasePolicy() ; };
operator hType () const { return mhandle; }
bool IsValidHandle() const { return NULL_VALUE != mhandle; }
};
#endif

I'd suggest that, rather than rolling your own, you should switch to
using a tried-and-true RAII mechanism like std::tr1::/boost::shared_p tr
(where you would supply a custom deleter) or even Loki::SmartPtr (where
you would supply a storage policy). No need to reinvent the wheel.

Cheers! --M
Sep 26 '06 #3

as*********@gma il.com wrote:
I am trying to learn RAII and some template techniques by writer a
I don't fully understand why you need templates here.
I usually write one class for every way I can allocate a system
resource.
E.g. LoadLibrary belongs in the constructor and FreeLibrary into the
destructor.
E.g. RegCreateKey belongs into the constructor and RegCloseKey() into
the destructor.
If allocation fails throw an an exception containing the full error
information -- e.g. GetLastError()
-- what() should then return the system error message -- using
FormatMessage() I think.

The same applies for other operating systems.

Sep 26 '06 #4

as*********@gma il.com wrote:
I am trying to learn RAII and some template techniques by writer a
I don't fully understand why you need templates here.
I usually write one class for every way I can allocate a system
resource.
E.g. LoadLibrary belongs in the constructor and FreeLibrary into the
destructor.
E.g. RegCreateKey belongs into the constructor and RegCloseKey() into
the destructor.
If allocation fails throw an an exception containing the full error
information -- e.g. GetLastError()
-- what() should then return the system error message -- using
FormatMessage() I think.

The same applies for other operating systems.

Sep 26 '06 #5
as*********@gma il.com wrote:
mlimber wrote:
as*********@gma il.com wrote:
I am trying to learn RAII and some template techniques by writer a
smarter pointer class to manage the resource management. Since I find
that a lot of the resource management is kinda the same, I try to mimic
some other examples outther then tailor to my needs. My case is for
windows handle like hkey, dll library, file handle, etc. But the code
largely uses standard C++. Only the Clean up action, I put windows api
call in there.
In general, I want to archieve one thing: the template will instantiate
when I give it the inpout type, then call the CloseResource eventually
to clean up on exit of scope.
>
But I have a hard time to make the class to find out what the
NULL_VALUE is. NULL_VALUE is a value that depends on the type. or is
this a worthwhile effort to get rid of that dependency?I defaulted
evertyhing to NULL now but not all type will default to NULL, if I take
extendsibility into account.
See below.
Also I notice I end up with a lot of small policy classes. Is there a
way to reduce that number? Because all it depends is the windows API
call. I think I am asking somethign circular here.
Some existing implementations of smart pointers (e.g.,
std::tr1::share d_ptr aka boost::shared_p tr) accept a deleter argument.
That would suffice in a case such as this:

struct SomeHandle { /*...*/ };
SomeHandle* GetResource();
void FreeResource( SomeHandle* );

std::tr1::share d_ptr<SomeHandl ehandle(
GetResource(), FreeResource );

You could also use boost::bind or boost::lambda to reduce the number of
simple policies (probably not a good idea if they are used more than
once).
For the release policy code:
#include <windows.h>
>
template <typename hType>
struct RegistryPolicy{
void CloseResource(h Type& h){
::RegCloseKey(h );
h=NULL; //?
Setting to NULL is probably unnecessary if you're using smart pointers
since the smart pointer is entirely responsible for the resource and
will only call on the release policy when the item is being destroyed
(either on destruction or reset).
};
Semicolons are not necessary after function definitions. You should
also make this function static since there is no member data in play
here.
>
protected: // do I need these or delete those? they are compiler
generated anyway
RegistryPolicy( ){};
~RegistryPolicy (){};
They would be generated public by default. You must define them
yourself to override that.
private:
RegistryPolicy( RegistryPolicy& );
RegistryPolicy& operator=(Regis tryPolicy&);
The function parameter should be const in both cases.
};
>
template <typename hType>
struct LibraryPolicy{
void CloseResource(h Type& h){
::FreeLibrary(h );
h=NULL; //?
};
protected:
LibraryPolicy() {};
~LibraryPolicy( ){};
private:
explicit LibraryPolicy(L ibraryPolicy&);
LibraryPolicy& operator=(Libra ryPolicy&);
};
>
>
template <typename hType>
struct CloseViewOfFile {
void CloseResource(h Type& h){
::UnmapViewOfFi le(h);
h=NULL; //?
};
protected:
explicit CloseViewOfFile (){};
~CloseViewOfFil e(){};
private:
CloseViewOfFile (CloseViewOfFil e&);
CloseViewOfFile & operator=(Close ViewOfFile&);
>
};
///////////////////////////// my smarter pointer code in below
//////////////////////////////
template <class T>
void DestroyObject(T object) {object->Destroy();}
>
template <class T>
void DesposeObject(T object) {object->CloseResource( );}
Dispose?
>
//
//
>
template <typename hType,
template<typena meclass ReleasePolicy=D eposeObject,
DisposeObject?
hType NULL_VALUE=NULL >//how to generalize NULL_VALUE? makeit
get the value depending on the type?
Use the default value of hType:

template
<
typename hType,
template<typena meclass ReleasePolicy=D isposeObject,
hType NULL_VALUE=hTyp e()
>
class SmartHolder;
class SmarterHolder{
private:
hType mhandle;
>
void CleanUp(){
if (NULL_VALUE!= mhandle)
{
ReleasePolicy(m handle);
mhandle = NULL_VALUE;
}
}
hType operator=(hType );
SmarterHolder(S marterHolder&);
>
public:
explicit SmarterHolder() :mhandle(NULL_V ALUE){};
explicit SmarterHolder(h Type h): mhandle(h){};
~SmarterHolder( ){ ReleasePolicy() ; };
operator hType () const { return mhandle; }
bool IsValidHandle() const { return NULL_VALUE != mhandle; }
};
#endif
I'd suggest that, rather than rolling your own, you should switch to
using a tried-and-true RAII mechanism like std::tr1::/boost::shared_p tr
(where you would supply a custom deleter) or even Loki::SmartPtr (where
you would supply a storage policy). No need to reinvent the wheel.

Cheers! --M
First, please don't top-post here (see
http://parashift.com/c++-faq-lite/ho....html#faq-5.4). I fixed it
for you in this reply.
Hi, thanks for your feedback. I learnt quite something by reading your
reply. The reason of making this is an exercise for me to learn more on
using template. My C++ is kinda shaky after 4 yrs of idle.
You should pick up _Accelerated C++_ by Koenig and Moo. It's great for
re-learning C++ the right way. Also, you might be interested in _Modern
C++ Design_ by Alexandrescu. You can see his chapter on smart pointers
here for free:

http://www.informit.com/articles/pri...p?p=25264&rl=1
In reply to DisposeObject below. What I intended as to let
SmarterHandle to call the the "Policy template class" such that, the
call will dispatch to the appropriate CleanResource. The idea was to
let the function template DisposeObject right above smarterhandle, then
which in turn defer to the policy class. I note that all the example I
see on theweb have SmarterHandle to inherit from ReleasePolicy to get
access to
CloseResource. But I just don't get why it has to inherit. so instead I
just try to do a usage here. But I can see there is something not going
right with my current arrangement. Can you help me a bit on that. I
don't think my C++ skills is good enough to concretly pinpoint that.
Inheritance is sometimes required if you want to build an interface
from policies. For instance:

struct A
{
static void f1() { /*...*/ }
void f2() { /*...*/ }
};

struct B
{
static void f3() { /*...*/ }
};

template<class Policy1, class Policy2>
struct C : Policy1
{
C()
{
f1();
f2();
Policy2::f3();
}
};

typedef C<A,BD;

void Foo( D& d )
{
D::f1(); // Ok
d.f2(); // Ok
D::f3(); // Error!
}

Notice that while D has no member functions of its own (other than the
constructor), it inherits some from its Policy1 template parameter and
it can internally use those of its Policy2 template parameter. In
general, you should not inherit unless you need to (cf.
http://www.parashift.com/c++-faq-lit...html#faq-24.3).

Cheers! --M

Sep 27 '06 #6

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

Similar topics

0
1087
by: Jason | last post by:
I have a class that I've written that inherits DataGrid. Inside the constructor I set several properties such as AllowPaging and AllowSorting to true, which is what I want the default values to be. In the consumer, which is a web form, I tested changing the properties to the opposite of their default values. When I run the page, the values in the consumer are ignored, and only the 'default' values are recognized. I thought I was perhaps...
1
4629
by: Qin Chen | last post by:
I will present very long code, hope someone will read it all, and teach me something like tom_usenet. This question comes to me when i read <<Think in C++>> 2nd, chapter 10 , name control, section "Static initialization dependency". There is a example to show how to solve the prolem involved with a technique first poineered by Jerry Schwarz while creating the iostream library (because the definitions for cin, cout, and cerr are static...
1
310
by: Rimma Meital via .NET 247 | last post by:
(Type your message here) -------------------------------- From: Rimma Meital I have 2 DLLs (Class Libraries). Both defines single-ton objects - logger object (writes to logger) and application_management object (stores paths and other things, reads ini file of the application). Both needs to refer to each other -> application_management can write to a logger and logger needs to know the path of logger file. Of course, it's circular...
5
3133
by: Chris | last post by:
I have a project that I have been messing with for a while. I get a message in my task list that says: "The dependency 'ICSharpCode.SharpZipLib' could not be found." I added this library in a while ago but removed it. I can't find where the dependency is. The solution builds just fine. There are 3 projects in the solution. Where do I go to find where this dependency is? Thanks
1
2086
by: martin | last post by:
Hi, I have a page that contain a dropdown list of values. This drop down list rarely changes so I wish to cache the page. However the values in the dropdown box are taken from a database, so if the values in the database change I wish to expire the cache and go to the database again and get a fresh copy. I have worked out that I should use one of the methods of cache.insert that take a cache dependency object, for example
4
6022
by: Sean Shanny | last post by:
To all, Running into an out of memory error on our data warehouse server. This occurs only with our data from the 'September' section of a large fact table. The exact same query running over data from August or any prior month for that matter works fine which is why this is so weird. Note that June 2004 through today is stored in the same f_pageviews table. Nothing has changed on the server in the last couple of months. I upgraded...
9
3969
by: Good Man | last post by:
Hi This is sort of a weird question, perhaps a bit off-topic... I am on the 'edit' screen of a web form, and I have a bunch of variables coming from a database that need to be placed into the form. In the past, I have been using PHP to pre-populate each field, something like <input type="text" id="firstName" value="<?= $first_name ?>" />
6
2762
by: Rolf Welskes | last post by:
Hello, I want to partial cache by using a UserControl. Now I have a file dependency. In msdn I see it is not possible to do it the same way as in a page. The only information is to create a file dependency and assign it to Dependency property.
0
2894
by: das | last post by:
Hello all, I am using the SqlDependency to subscribe to any new inserts into a database table, I enabled the DB to be borker ready and subscrbed to Query notifications on the database. My C# Windows service has a simple query that checks if a new entry is made into a table, select * from Cast_Member where isMajor = '1' When I insert a new record into this table with isMajor = 1, then the
0
9562
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can effortlessly switch the default language on Windows 10 without reinstalling. I'll walk you through it. First, let's disable language synchronization. With a Microsoft account, language settings sync across devices. To prevent any complications,...
0
10309
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...
0
10068
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
9119
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
7600
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
6840
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
5496
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...
1
4274
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
3795
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.