|
Thanks for quick response. I have working implementation of this type. But I was curious if any other soln exists.
|
|
|
|
|
Well, if the legaci API uses strings strictly as IN parameters then you have to option to drop the string copy operations.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
|
|
|
|
|
CPallini wrote: Well, if the legaci API uses strings strictly as IN parameters then you have to option to drop the string copy operations.
hu, what ???
|
|
|
|
|
exactly.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
|
|
|
|
|
man, I wasn't joking.
I really asking what you said, because I don't understand what you mean !
|
|
|
|
|
Well, it was not a difficult concept: if the legacy code function access just read-only the passed string, there's no need to copy memory buffers. Often happens that legacy code declares a function such
void printlog( char * buf);
where instead wuold be more appropriate
void printlog (const char * buffer);
When dealing with such code, you can safely cast the const char * pointer to a char * one.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
|
|
|
|
|
ah, yes.
but as the API needs an array of strings, we have to copy the std::string objects into the char** memory allocated anyway to be able to pass it forward...
|
|
|
|
|
Namely:
std::vector<std::string> v;
size_t n = v.size();
char** str_arr = ::new char*[n];
int i = 0;
for (vector<string>::iterator it = v.begin(); it != v.end(); it++, i++) {
str_arr[i] = (char *) it->c_str();
}
</string></std::string>
When dealing with large strings it maybe suitable.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
|
|
|
|
|
humm, quite dangerous though.
must be use forbidding to modify the array then.
but, ok, i get it.
|
|
|
|
|
Thanks to all for helping me finding the solution.
|
|
|
|
|
if my solution was good, you good vote it as "Good Answer"
|
|
|
|
|
Here you are the char** the elegant way:
char **pp;
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
|
|
|
|
|
what is this file and why I have it in system32/ on one XP machine but not on the other machine ?
does it comes with DirectX runtime / SDK ?
|
|
|
|
|
have you ever thought that one application could have installed it by any chance ?
|
|
|
|
|
|
Hanan888 wrote: does it comes with DirectX
Yes.
"Love people and use things, not love things and use people." - Unknown
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
Yeah each file that has d3dx*.dll is with DirectX.
|
|
|
|
|
That is directx 9 component, may be you have installed directx runtime. There are other possibility since windows XP shipped with directx 8 by default so you may not find in one machine while windows XP SP2 updates to directx 9c has this file. I mean may be one machine is Windows XP SP2 or higher while other is lower. see here [^]
|
|
|
|
|
It is part of DirectX, for some reason MS changed the way they update DX, when you apply an update, instead of updating the existing dlls, they simple add another one.
|
|
|
|
|
Hi all,
I am a VC2005 programmer. I have just started working on vista, my problem is when i run my program it gives an error "The requested operation requires elevation". my program compiles correctly but gives error at this time.
Can anybody help in this
Thanks in advance
IN A DAY, WHEN YOU DON'T COME ACROSS ANY PROBLEMS - YOU CAN BE SURE THAT YOU ARE TRAVELLING IN A WRONG PATH
|
|
|
|
|
|
We are developing a game using DirectX9.
We are trying to answer the question - does XP users already have DirectX9 installed or to we need to bring it with us ?
|
|
|
|
|
Usually (commercial) games provide appropriate DirectX setup.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
|
|
|
|
|
you're kidding right ?
XP (even SP3 !) doesn't provide any version of DirectX.
YOU have to install it when installing your game.
|
|
|
|
|
toxcct wrote: XP (even SP3 !) doesn't provide any version of DirectX.
No, Most of the windows after windows 98 is shipped with default directX runtime. DirectX is a crucial system component, for example Windows Media Player is based on DirectX renderer. Windows XP shipped with DirectX 8.1, while SP2 updates to DirectX 9c.
see this
"DirectX 9c 0x00000387 4.09.00.0903. This is an incremental update, which includes DirectX 9b updates, plus additional updates for Windows XP Service Pack 2 (SP2). This is the default version for SP2."
and
" DirectX 8 versions do not install on Windows XP. Windows XP shipped with DirectX 8.1 and the DirectX 8.1a and DirectX 8.1b updates were included in Windows XP Service Pack 1"
from [DirectXSetupGetVersion^].
for a list of Directx version released from win98 to win vista see here [DirectX^]
modified on Thursday, May 22, 2008 1:42 PM
|
|
|
|