|
Pls do help me guys..
isn't there anyone ????
|
|
|
|
|
I recently discovered that Visual Studio 2008 puts its runtime libraries in the side-by-side assemblies directory. A lot of my projects have dependencies on the runtime DLLs. According to what I've read about side-by-side, it "requires" the use of Windows Installer to deploy them. However, I've invested significant time in learning and using Inno Setup and don't really like the Windows Installer for various reasons (some personal, some professional).
I guess my question is: How does redistribution of side-by-side assemblies work (behind the scenes)?
I should point out that my projects are being imported from older versions of VS and I'm wanting to fully update them to the latest version of VS. Side-by-side is new to me.
|
|
|
|
|
I don't use innosetup, so not sure how you implement this, but it's possible to include the side-by-side assemblies in your distribution.
If you have your application in a directory c:\myapps and your exectuable "myapp.exe" is in this folder, you can put the side-by-side assemblies in that folder also.
You'll find the correct distributables for the side-by-side assemblies in the \Program Files\Microsoft Visual Studio 8\VC\redist folder - there are several subfolders there (e.g. x86, ia64, amd64 and so on). Inside the x86 folder, you'll find a folder named Microsoft.VC80.MFC and another folder called Microsoft.VC80.CRT. Copy those complete folders to your c:\myapps directory.
When done, your c:\myapps directory would contain
myapp.exe - executable you wrote
Microsoft.VC80.CRT - folder with the side-by-side C Runtime for VC80
Microsoft.VC80.MFC - folder with the side-by-side MFC 80
That should allow your app to run.
Hope that helps.
Karl - WK5M
PP-ASEL-IA (N43CS)
PGP Key: 0xDB02E193
PGP Key Fingerprint: 8F06 5A2E 2735 892B 821C 871A 0411 94EA DB02 E193
|
|
|
|
|
VC8 is Visual Studio 2005 (not what I have).
VC9 is Visual Studio 2008 (what I have). And MFC has some weird stuff involving language separated DLLs (MFC directory AND a MFCLOC directory). What do I do for those? How do I get my old VC++ 2003 projects to start using side-by-side? Right now the compiler is looking for the 7.1 version of the runtimes (msvcr71.lib), not finding it, and therefore the linker is failing. Remember, these are imported solutions and projects from VC++ 2003.
|
|
|
|
|
VS2005 also has the MFCLOC and such. I believe the same basic instructions I gave you will work with VS2008 to use the side-by-side assemblies.
If the compiler is looking for the 7.1 version, that's a completely different problem from the installation of the assemblies.
Karl - WK5M
PP-ASEL-IA (N43CS)
PGP Key: 0xDB02E193
PGP Key Fingerprint: 8F06 5A2E 2735 892B 821C 871A 0411 94EA DB02 E193
|
|
|
|
|
With VS2005 it is possible to include the file vcredist_x86.exe within your installer. Have Inno run and then delete that file at setup and the all the necessary files will installed on the users machine in the proper location. VS2008 should have the same method.
|
|
|
|
|
Is there any way to prevent CFileDialog from changing forlders ?
Or at least to always default to a given folder.
I want to use CFileDialog just to look at files in one folder and one folder only.
a) can I disable/remove the folder choices from the CFileDialog window.
b) if not can I force CFileDialog to only look in one folder ?
c) even if user changes folder, when done can I force CFileDialog next time to go back to my given folder ?
I could not find an option to disable CFileDialog browsing, so I tried to force it to always look at my folder only, like so.
CFileDialog dlg(TRUE, "pfl", name, ..., ... | OFN_NOCHANGEDIR)
SetCurrentDirectory ("My Fixed Choice");
dlg.m_ofn.lpstrInitialDir = "My Fixed Choice";
if (dlg.DoModal() == IDOK) {
}
If the user changes folders, it next time goes back to that folder and ignores the above ????
Thanks
Henri
|
|
|
|
|
Hi Henri,
I was faced with a similar question some time ago and decided to use CFileFind(er?) and put the results into a ListBox. That seemed to be the simplest approach because I only wanted to select a file from a list anyway.
Regards,
Andreas
|
|
|
|
|
There used to be a OFN_NOCHANGEDIR flag you could use, but it is no longer supported.
Check the (current) docs for the OPENFILENAME.lpstrInitialDir member and see if any of the algorithms
the system uses to set the initial directory apply to you (it varies by OS).
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
before domodal() use SetCurrentDirectory()
|
|
|
|
|
HI all.
I have some problem with some old program (ARCZV.COM) this program open *.arc file.
problem is:
<br />
system("F:\\temp\\ARCZV.COM");<br />
output is:
<br />
F:\temp\ARCZV.COM<br />
Insufficient memory<br />
but if I write this "F:\temp\ARCZV.COM" in 'cmd ' program runs,
sow I dont get whot I am doing wrong
help if can
thanks
|
|
|
|
|
Did you try with SellExecute?
|
|
|
|
|
Hello!
When writing to an USB stick, Windows caches all writes. We are therefore required to safely eject the USB stick in Windows before removing it. Unfortunately it frequently happens that users remove USB sticks without ejecting it first.
I would now like to force Windows to flush a file immediately when it's closed programmatically, i.e. I'm looking for an API function that allows such flushing. I am not looking for a way to completely disable the caching. The file is written using CreateFile/WriteFile.
Is there such an API or way to achieve flushing?
Thanks and best regards
Dominik
|
|
|
|
|
I've done that before. IIRC, you have to delve into DeviceIoControl().
|
|
|
|
|
Do you remember the control code you used?
I've only found IOCTL_STORAGE_EJECT_MEDIA and such things, but no code to only flush write buffers.
Thanks for your reply, best regards
Dominik
|
|
|
|
|
Look at "FSCTL_LOCK_VOLUME". MSDN Library has this to say about it:
"The system flushes all cached data to the volume before locking it. For example, any data held in a lazy-write cache is written to the volume."
|
|
|
|
|
I'll try that, thanks a lot!!
|
|
|
|
|
FlushFileBuffers doesn't work for a USB file?
Judy
|
|
|
|
|
Hello everyone,
This is what mentioned in the book The C++ Standard Library, section 6.3 Deques,
--------------------
In summary, you should prefer a deque if the following is true:
You don't refer to elements of the container.
It is important that the container frees memory when it is no longer used (however, the standard does not guarantee that this happens).
--------------------
My confusions,
1. What means "refer to elements of the container"? We should not do that? Why -- we always refer to elements in the container? When we use iterator of deque to acccess elements in deque container, we always refer to elements of container, right? What does the author mean?
2. I think whether deque container implementation actually free the memory when we do erase or pop or just mark it as freed to reserve for future use (e.g. insert or push) is up to implementation details, does this point to be a reason why we use deque? Confused.
thanks in advance,
George
|
|
|
|
|
i assume he means you should only pop elements off the front end of the queue to look at them, you don't iterate over the queue and look at items the way you would with a vector (or a list). you use a queue when you need access to the front end (for reading) and the back end (for writing), and you don't much care about what happens in the middle.
|
|
|
|
|
Thanks Chris Losinger!
How do you understand this "It is important that the container frees memory when it is no longer used (however, the standard does not guarantee that this happens)."?
regards,
George
|
|
|
|
|
nobody would use or publish a container that didn't release memory when it was no longer needed. so i wouldn't worry about it.
|
|
|
|
|
Hi Chris Losinger,
Please read the context,
--------------------
In summary, you should prefer a deque if the following is true:
It is important that the container frees memory when it is no longer used (however, the standard does not guarantee that this happens).
--------------------
I do not know why "container frees memory is a reason why we use deque". I think it is up to implementation whether to free the memory or delay the free for the reason of performance improvement when we do rease/pop.
I think the author does not mean memory leak. Any comments? I do not know why it becomes a reason...
regards,
George
|
|
|
|
|
i don't have an answer for this.
you use a dequeue when you needs its primary functionality (ex: pop_front, push_back) and don't need random access (like with a vector). the exact implementation and its memory allocation strategy is not worth worrying about in the vast majority of situations.
|
|
|
|
|
Thanks Chris Losinger,
Question answered.
regards,
George
|
|
|
|