|
hello guys... I am actually recording a wave file. I have hardcoded the file path but the file name is provided by the user. Now I want to wave file to be stored at this combination of these two which in im successful. Here is what im trying
LPCSTR filePath = "d:\\Audios\\";
LPCSTR fileNamePath = strcat(filePath, strcat(fileName, ".wav"));
This is not successful, how can I do that?? thnx
|
|
|
|
|
overloaded Name wrote: This is not successful
Please be specific when asking a question. What doesn't work exactly ?
In your case, I would guess it is because you are using constant strings (LPCSTR, the C is for constant). Try using LPSTR instead, it should work. Don't forget that strcat will modify the destination string (check the documentation).
BTW, it is far more easier to use std::string instead of using raw char pointers.
|
|
|
|
|
strcat needs a writeable destination buffer.
where is all this text going to be stored? you need a buffer large enough to hold it, I see it nowhere.
Here is one way of doing it (C code):
char* result=malloc(1000);
strcpy(result, filePath);
strcat(result, fileName);
strcat(result, ".wav");
This is far from optimal, as the size is overestimated, and the string operations are unsafe, they could overrun the destination buffer. It would also fail if filePath doesn't end on a backslash, or fileName already has an extension.
But it would work.
Luc Pattyn [Forum Guidelines] [My Articles] Nil Volentibus Arduum
Please use <PRE> tags for code snippets, they preserve indentation, improve readability, and make me actually look at the code.
|
|
|
|
|
You are using strcat() incorrectly so this code wll not work. However, you would also be better using the more secure versions[^] of these functions.
I must get a clever new signature for 2011.
|
|
|
|
|
You could use the PathCombine[^] and PathAddExtension[^] functions, they solve the problems mentioned by Luc Pattyn.
e.g.
PathCombine(fileNamePath,filePath,fileName);
PathAddExtension(FileNamePath,".wav");
Note the remark, make fileNamePath able to hold at least MAX_PATH characters.
modified 13-Sep-18 21:01pm.
|
|
|
|
|
Pretty handy functions, i did not know they existed.
To OP, if you do use them you will need to #include and link with Shlwapi.
|
|
|
|
|
Here is the C++ way to do this -
std::stringstream strm;
strm << filepath << filename << ".wav";
std::string str(strm.str());
|
|
|
|
|
I need a sample of how to load dialog resource from a dll
I found a sample here but it is not working.
http://www.codeproject.com/Messages/1212280/Re-how-to-load-dialog-resource-from-a-dll.aspx
HMODULE hModule = LoadLibrary("C:\\another_resource.dll");
if(hModule != NULL)
{
HWND hDialog = CreateDialog(hModule, MAKEINTRESOURCE(ID_DIALOG), , );
HBITMAP hBitmap = LoadBitmap(hModule, MAKEINTRESOURCE(IDB_BITMAP);
FreeLibrary(hModule);
}
thanx in advance please help
Some Day I Will Prove MySelf :: GOLD
|
|
|
|
|
please mention what is among LoadLibrary, CreateDialog and LaodBitmap is not working.
|
|
|
|
|
create dialog.. Is required,
I have the correct dialog id and i m able to load the dll using loadlibrary(). After this i m confused what to do next,
so i need a small example that demonstrate how to show the dialog from resource dll.
Thanx in advance.
Some Day I Will Prove MySelf :: GOLD
|
|
|
|
|
|
thanx, but i need help in displaying a dialog from a resouce dll.
Some Day I Will Prove MySelf :: GOLD
|
|
|
|
|
Is the resource ID ID_DIALOG in the calling program equal to what was used in the DLL?
If you're not sure and you don't have the DLL's code to look it up, you could analyse the DLL with the resource hacker[^].
modified 13-Sep-18 21:01pm.
|
|
|
|
|
i have the correct id, i need a small code to show the dialog from reource dll in win32 way
Some Day I Will Prove MySelf :: GOLD
|
|
|
|
|
If you are using MFC you can create an instance of the dialog class from the DLL. Be sure to use MFC with dynamic linking in both the exe and dll.
The way I did this in my project was:
In the DLL have
class MyDialog : public CDialog {
}
Then an exported function to create and destroy the instance.
Because in C++ the return type and parameters make up the function name, we should use C for exporting functions, however we cannot create classes in C.
Any memory allocated from within a DLL should be deleted from within the DLL too, so we need a create and destroy function
The following will create an instance of the class and return it through a C function and delete it when you are finished with it.
void *InternalGetDialog() {
return new MyDialog();
}
void InternalDeleteDialog(void *pDlg) {
CDialog *pDialog = (CDialog *)pDialog;
delete pDialog;
}
extern "C" {
__declspec(dllexport) void *GetDialog() {
return InternalGetDialog();
}
__declspec(dllexport) void DeleteDialog(void *pDialog) {
InternalDeleteDialog(pDialog);
}
}
Then in the exe that displays the dialog
typedef CDialog *(*GetDialogFunc)();
typedef CDialog *(*DeleteDialogFunc)();
void DisplayDynamicDialog() {
HMODULE hModule = LoadLibrary("Resources.dll");
if (hModule != NULL) {
GetDialogFunc pGetDialogFunc = (GetDialogFunc)GetProcAddress(hModule, "GetDialog");
DeleteDialogFunc pDeleteDialogFunc = (DeleteDialogFunc)GetProcAddress(hModule, "DeleteDialog");
CDialog *pDialog = pGetDialogFunc();
INT_PTR nRes = pDialog->DoModal();
pDeleteDialogFunc(pDialog);
FreeLibrary(hModule);
}
}
|
|
|
|
|
thanx 4 ur reply with sample but i need the sample in win32 way, my program don't use MFC.
Some Day I Will Prove MySelf :: GOLD
|
|
|
|
|
Firstly you need a message handler, essentialy the same as your main message handler, usually WndProc
BOOL CALLBACK DlgProc(HWND hDlg, UINT nMessage, WPARAM wParam, LPARAM lParam) {
switch (nMessage) {
case WM_INITDIALOG:
return TRUE;
case WM_COMMAND:
switch (LOWORD(wParam)) {
case IDOK:
return TRUE;
case IDCANCEL:
DestroyWindow(hDlg);
return TRUE;
}
break;
}
}
return FALSE;
}
Then you just need to use that as the "procedure function"
void DisplayDynamicDialog(HWND hParent) {
HMODULE hModule = LoadLibrary("Resources.dll");
if(hModule != NULL) {
hDialog = CreateDialog(hModule, MAKEINTRESOURCE(ID_DIALOG), hParent, (DLGPROC)DlgProc);
ShowWindow(hDialog, SW_SHOW);
FreeLibrary(hModule);
}
}
Finally, just to reiterate what Thaddeus Jones said, the ID you supply needs to be the ID defined in the DLL, not the ID defined in the exe, hence the resource.h that you include needs to be from the dll. To avoid confusion, I recommend using quoted string names instead.
|
|
|
|
|
thanks a lot, worked like a charm, once again thanx.
Some Day I Will Prove MySelf :: GOLD
|
|
|
|
|
|
Firstly your call to CreateDialog() is incomplete, so this code will not even compile. Secondly are you sure you are making the right call (i.e. is this a Modal or Modeless dialog)?
Take a look here[^] for some more information.
I must get a clever new signature for 2011.
|
|
|
|
|
i know it is incomplete, therefore i m in need of a sample in win32 way.
Some Day I Will Prove MySelf :: GOLD
|
|
|
|
|
OK so what part of this[^] are you having trouble with?
I must get a clever new signature for 2011.
|
|
|
|
|
sir i had received the answer, thanx for giving ur valuable time sir.
Some Day I Will Prove MySelf :: GOLD
|
|
|
|
|
Hi all,
Can any body help me how to use the VC++ activex control
in linux Gui (QT) applications?
|
|
|
|
|
You cannot do that.
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
[My articles]
|
|
|
|