|
Sounds like you pretty much understand why the Microsoft sample failed. Here is an old MSDN article with more info:
__declspec(dllimport) and __declspec(dllexport)[^]
invader82 wrote: now I just have to figure out why it works
Ahhh but isnt it great learning something new? Here are two more ways you could have fixed the Microsoft sample assembly code. I leave it as an excercise to the reader to figure out why it works.
[Method 1]
call dword ptr [esi+printf]
[Method 2]
mov esi,printf
call esi
Feeling like a programming dinosaur,
-David Delaune
|
|
|
|
|
thx for the article very usefull
Method 1 doesn't work and I don't see how it could work.
It uses the value of esi as a base address and adds the printf function address to it
I guess this would only work if esi == 0
method 2 is quite straight forward. it just puts the address of the function into esi
and performs an indirect call to that function using the addres in esi.
thanks anyway
|
|
|
|
|
|
|
Gajendra Sharma wrote: Is it true also for Unix Sockets
It is.
|
|
|
|
|
Gajendra Sharma wrote: Is it true also for Unix Sockets?
Sockets are not platform/OS dependent.
It is a crappy thing, but it's life -^ Carlo Pallini
|
|
|
|
|
Gajendra Sharma wrote: Is it true also for Unix Sockets?
Yes.
The Microsoft implementation was originally designed/derived from Unix Berkeley sockets[^] and for the most part they are compatiable. There have been many Windows specific extensions in Microsoft Winsock2 but for standard TCP/IP and UDP they are nearly identical implementations.
Best Wishes,
-David Delaune
|
|
|
|
|
Thanks all for the valuable replies.
Best Regards.
Gajendra Sharma
Gajendra
|
|
|
|
|
I want to use an ocx in Vista session 0 using hidden window/dialog. This is giving me crash consistently. Has anyone tried this successfully?
|
|
|
|
|
Hello,
i have the following problem that i want to describe with codesnippets:
i have the class CGCxPageElement. Its the Base class of CGCxPane:
class CGCxPageElement : public CGCxHtmlTemplate {
DECLARE_DYNCREATE(CGCxPageElement)
public:
CGCxPageElement();
CGCxPageElement(const CGCxPageElement &e) {
m_strTemplate = e.m_strTemplate;
m_strContent = e.m_strContent;
}
CGCxPageElement& operator=(const CGCxPageElement &e) {
m_strTemplate = e.m_strTemplate;
m_strContent = e.m_strContent;
return *this;
}
virtual ~CGCxPageElement();
protected:
CString m_strContent;
public:
virtual void SetContent(CString strContent);
virtual void SetContent(UINT nIDResource);
virtual CString MakeHtml();
};
class CGCxPane : public CGCxPageElement {
DECLARE_DYNCREATE(CGCxPane)
public:
CGCxPane();
CGCxPane(const CGCxPane &e) {
m_strTemplate = e.m_strTemplate;
m_strContent = e.m_strContent;
m_strTitle = e.m_strTitle;
}
CGCxPane& operator=(const CGCxPane &e) {
m_strTemplate = e.m_strTemplate;
m_strContent = e.m_strContent;
m_strTitle = e.m_strTitle;
return *this;
}
virtual ~CGCxPane();
protected:
CString m_strTitle;
public:
void SetTitle(CString strTitle);
virtual CString MakeHtml();
};
then i have an array of CGCxPageElement objects. i have to add GCxPane and other Object inherited from CGCxPageElement to it:
CArray<CGCxPageElement, CGCxPageElement&> m_Elements;
now here comes the problem: inside another class i want to go through the CGCxPageElement array and call the method MakeHtml, but not that one of the base class but of the child e.g. CGCxPane
for (int i = 0; i < m_Elements.GetCount(); i++) {
CGCxPageElement elem = m_Elements[i];
strContent.Append(elem.MakeHtml());
}
1. how can i find out what class is stored in m_Elements originally?
2. how can i call the MakeHtml() method of this class and not of the base class?
i am not a pro in inheritance...but for now i am stuck. any casting like
CGCxPane pane = (CGCxPane) m_Elements[i];
does not work and i don't want to hadrcode the CGCxPane inside because there will be some more CGCxPageElement object not only CGCxPane.
any help would be much appreciated!
regards,
rudi
|
|
|
|
|
That's exactly the purpose of polymorphism. What you have to store in your array, is in fact pointers to the base class:
CArray<CGCxPageElement*> m_Elements;
Then if you have several different children of CGCxPageElement, you can simply create them and store them in the array (a pointer to a child class is also a pointer to the base class):
CGCxPageElement* pNewElement = new CGCxPane();
m_Elements.Add(pNewElement);
Then, if you make your MakeHtml function virtual, you can simply iterate over the array and call the function. It will automatically call the function from the correct type.
Don't forget to delete the elements from the array when you remove them.
I suggest you search a bit for polymorphism and C++ to have a better understanding of it.
|
|
|
|
|
Hello Cedric,
thank you very much for your answer. i changed my array to a pointer array and now evertything works like it should. i knew the answer was pretty trivial but i somehow got stuck in the code
i have have more and more to get used to the whole pointer and polymorphism stuff in c++.
@sashoalm: thank you for the link. when i have some time left i will have a deeper look on polymorphism...
regards,
rudi
|
|
|
|
|
That's what virtual functions[^] are for
There is sufficient light for those who desire to see, and there is sufficient darkness for those of a contrary disposition.
Blaise Pascal
|
|
|
|
|
Hello All,
I have stucked in this problem.
I have a PMD Camera , How can I read the streaming and send any captured image to the server using WLAN in VC++ ?
Any start help pr sample code will be very helpfull.
Regards
|
|
|
|
|
|
Hi,
Is there any SDK or API which gives me the FILE Pointer to the file which is zipped inside another file. Basically I have couple of files which are winzipped and password protected. I want to FILE pointer to file which is inside the zip file. We have similar kind of functionality in sharpziplib which gives stream of file which is inside the zip file. sharpziplib is available in C#. Is there any SDK or libarary or API which is available to implement such kind of functionality in C++.
thanks,
Umrahi
If you have faith in the cause and
the means and in God, the hot
Sun will be cool for you.
|
|
|
|
|
I'm not sure about FILE* pointer, but if you want to extract the file see Minizip[^].
There is sufficient light for those who desire to see, and there is sufficient darkness for those of a contrary disposition.
Blaise Pascal
|
|
|
|
|
thanks for reply...
It seems it is not a managed code or compatible with visual studio 2008... Can you show me any library which is compatible with Visual studio 2008
thanks again
If you have faith in the cause and
the means and in God, the hot
Sun will be cool for you.
|
|
|
|
|
Hi ,
I am using this RasSetEntryProperties() function to write entries in phone book.
In Windows Xp machine i got all the properties properly.
But in Vista machine these following etries are not been created.
PhoneNumber=
AreaCode=
CountryCode=1
CountryID=1
UseDialingRules=0
Comment=
Can you please let me know what is the difference in vista in this context?
Thanks in advance...................
Birajendu
SonicWALL
Bangalore
India
|
|
|
|
|
Anyone know a C++ function or library that can be used for percent decoding? I need a function that can take urls of the type "http%3A%2F%2Fwhatever.com" and turn it into "http://whatever.com". I searched on google but couldn't find anything.
I hope there is a standard function in some library (may be boost, I've heard it has nearly everything in it). But since URL decoding is a common problem there has to be some pre-cooked solution for it.
Write now I use code that I've written myself but it only works for 5-6 of the most common symbols, and it's definately not optimized!
std::string s2;
s2.reserve(m_RealUrl.size());
for (size_t i = 0; i < m_RealUrl.size(); i++)
{
if (m_RealUrl[i] == '%')
{
if (!strncmp(&m_RealUrl[i], "%3A", 3))
s2 += ':';
else if (!strncmp(&m_RealUrl[i], "%2F", 3))
s2 += '/';
else if (!strncmp(&m_RealUrl[i], "%3F", 3))
s2 += '?';
else if (!strncmp(&m_RealUrl[i], "%3D", 3))
s2 += '=';
else if (!strncmp(&m_RealUrl[i], "%26", 3))
s2 += '&';
else if (!strncmp(&m_RealUrl[i], "%25", 3))
s2 += '%';
i += 2;
}
else
s2 += m_RealUrl[i];
}
There is sufficient light for those who desire to see, and there is sufficient darkness for those of a contrary disposition.
Blaise Pascal
|
|
|
|
|
Try the Wininet[^] api, it has methods to canonize an URL, maybe it has something to do the job the other way too...
> The problem with computers is that they do what you tell them to do and not what you want them to do. <
> Life: great graphics, but the gameplay sux. <
|
|
|
|
|
|
Thanks, that was just what I needed!
There is sufficient light for those who desire to see, and there is sufficient darkness for those of a contrary disposition.
Blaise Pascal
|
|
|
|
|
|
And if you're using MFC, there is AfxParseURLEx[^] function.
It is a crappy thing, but it's life -^ Carlo Pallini
|
|
|
|