|
The question arises: are you willing to export an object of the class from the DLL, or the definition of the class ?
If it is the first one, then may I suggest that you create a global object inside the DLL's code, and export a function from the DLL which returns the address of this object. This, however, requires that you have the definition of the class available at the loading application in order to use it. I do not know for sure how well you can use C++ header files in a VB project, or if there is a conversion available.
-Antti Keskinen
----------------------------------------------
The definition of impossible is strictly dependant
on what we think is possible.
|
|
|
|
|
hi friends,
i have a c++ program like this :
#include "iostream.h"
int main()
{
cout << "John" << endl;
return 1;
}
The program will print "John" on screen.
Now my problem is that i want to print "Hello John Bye" on the screen without changing anything inside main function.
CAN SOMEBODY PROVIDE ME THE ANSWER.
|
|
|
|
|
#include "stdafx.h"
using std::cout;
using std::endl;
class CTest
{
public:
CTest()
{
cout << "Hello John bye" << endl;
exit(0);
}
};
int main(int argc, char* argv[])
{
cout << "John" << endl;
return 0;
}
CTest test;
|
|
|
|
|
Hi Imran,
It will print ,"Hi John bye John" but i need "Hi john bye".
|
|
|
|
|
Based on Imran's solution, here is a bit more customized version which does as desired.
#include <iostream>
using namespace std;<DIV>
class CFirst
{
public:
CFirst() { cout << "Hi "; }
}<DIV>
class CLast
{
public:
CLast() { cout << " Bye"; }
}<DIV>
CFirst object1;<DIV>
int main( int argc, char* argv[] )
{
cout << "John" << endl;
return 0;
}<DIV>
CLast object2; This piece would print "Hi John\n Bye". Removing the line change from inside main is impossible, as far as I know, without doing some serious stream interception. All this seems unnecessary though. Just boot the line change from there, or pretend that you didn't notice it :P
-Antti Keskinen
----------------------------------------------
The definition of impossible is strictly dependant
on what we think is possible.
|
|
|
|
|
Actually this will/may put :
"Hi ByeJohn"
because both objects are initialized (constructors called) before main().
I say may, because as far as i know you can't count on the order that global objects will be initialized within a given init_seg.
Having said that you could use the
#pragma init_seg()
directives to put CFirst, CLast and main in different .cpp files and use init_seg(lib) for CFirst and init_seg(user) for CLast to ensure the order they were constructed ... but that seems like a whole lot of work to still get the wrong output.
...cmk
Save the whales - collect the whole set
|
|
|
|
|
Please refer the code i wrote above:
In the constructor of CTest class, there is an exit(0) call. So this program will never enter the main function.
Trick is that, in C++, global objects are created before program enters the main function. So we created the object of CTest class as a global object. As such its constructor gets called in which we first print our desired string and then exit(0) gets calls and the program ends.
|
|
|
|
|
What about as Imran had but :
CTest()
{
cout << "Hello ";
}
~CTest()
{
cout << " Bye";
}
... although you should really do your own homework.
[edit]
Hmmm, this doesn't print the " Bye", altough the code goes there. Even adding cout.flush() doesn't print it. Looks like ostream system has been shut down by then. Using printf() does work in printing " Bye", but you need to eat the \n first, and adding \b doesn't seem to work ... hmmm
[/edit]
...cmk
Save the whales - collect the whole set
|
|
|
|
|
Couldn't remember the console cursor movement functions (ala curses).
However, here is a hack that works (and is within the contraints given ), but not likely the solution you need :
#include <iostream>
using namespace std;
class CFirst{
public:
CFirst() {
cout << "Hi ";
}
~CFirst() {
printf("Bye\n");
}
};
CFirst f;
#define endl ' '
int main( int argc, char* argv[] )
{
cout << "John" << endl;
return 0;
}
...cmk
Save the whales - collect the whole set
|
|
|
|
|
Hello all,
please don't laugh
but here is one solution
#include <iostream.h>
#define cout cout << "Hello "
#define endl " Bye" << endl
int main(int argc, char* argv[])
{
cout << "John" << endl;
return 1;
}
When all else fails read the manual
|
|
|
|
|
Not laughing, as valid a solution as any, given the constraints.
...cmk
Save the whales - collect the whole set
|
|
|
|
|
That's the kind of solution that pisses teachers off. I love it.
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
|
|
|
|
|
hi,
this solution should result in compilation error, although i haven't checked it but we can't apply #define on the cout and endl like this.
|
|
|
|
|
It isn't doable, because you #define cout as a part of itself.. Like, what you're doing is:
#define MAX_AMOUNT MAX_AMOUNT + 20 Similar type of error.
Man I really wish that that thing would've worked, it would've been a kickass "spoil-a-teacher's-day" for some C++-course
-Antti Keskinen
----------------------------------------------
The definition of impossible is strictly dependant
on what we think is possible.
|
|
|
|
|
IT REALLY WORKS like a charm ,
go ahead try to compile , it works !!!
When All Else Fails Read the Manual
|
|
|
|
|
anybody out there ever used DirectSoundFullDuplexCreate8() of the DirectSound???
I keep getting E_INVALIDARG...can't figure out the reason..Code as follows.. Can anyone figure out where the prob is???
HRESULT hr;
DSBUFFERDESC dsbdesc;
DSCBUFFERDESC dscbdesc;
DSCEFFECTDESC dsceffectdesc;
WAVEFORMATEX Capwfx;
LPDIRECTSOUNDFULLDUPLEX8 m_pDSFullDuplex = NULL;
LPDIRECTSOUNDBUFFER8 m_pDSBOutput = NULL;
LPDIRECTSOUNDCAPTUREBUFFER8 m_pDSBCapture8 = NULL;
// Initialize COM
if( FAILED( hr = CoInitialize(NULL) ) )
return DXTRACE_ERR_MSGBOX( TEXT("CoInitialize"), hr );
memset(&Capwfx, 0, sizeof(WAVEFORMATEX));
Capwfx.wFormatTag = WAVE_FORMAT_PCM;
Capwfx.nChannels = 1;
Capwfx.nSamplesPerSec = 16000;
Capwfx.nBlockAlign = 4;
Capwfx.nAvgBytesPerSec = Capwfx.nSamplesPerSec * Capwfx.nBlockAlign;
Capwfx.wBitsPerSample = 16;
// Obtain Sec buffer
ZeroMemory( &dsbdesc, sizeof(DSBUFFERDESC) );
dsbdesc.dwSize = sizeof(DSBUFFERDESC);
dsbdesc.dwFlags = 0;
dsbdesc.dwBufferBytes = 3 * Renwfx.nAvgBytesPerSec ;
dsbdesc.dwBufferBytes = 0;
dsbdesc.lpwfxFormat = &Capwfx;
//DS Capture Effects Struct
ZeroMemory( &dsceffectdesc, sizeof(DSCEFFECTDESC) );
dsceffectdesc.dwSize = sizeof(DSCEFFECTDESC);
//DS Capture BUffer Desc
ZeroMemory( &dscbdesc, sizeof(DSCBUFFERDESC) );
dscbdesc.dwSize = sizeof(DSCBUFFERDESC);
dscbdesc.dwFlags = DSCBCAPS_CTRLFX;
dscbdesc.lpwfxFormat = &Capwfx;
dscbdesc.dwBufferBytes = 250000;
dscbdesc.dwFXCount = 1;
dscbdesc.lpDSCFXDesc = &dsceffectdesc;
//Effect specified by guidDSCFXInstance must be in software
dsceffectdesc.dwFlags = DSCFX_LOCSOFTWARE;
dsceffectdesc.guidDSCFXClass = GUID_DSCFX_CLASS_AEC;
dsceffectdesc.guidDSCFXInstance = GUID_DSCFX_MS_AEC;
if( FAILED( hr = DirectSoundFullDuplexCreate8(g_pcGuidCaptureDevice,g_pcGuidRenderDevice,&dscbdesc,&dsbdesc,NULL,DSSCL_PRIORITY,&m_pDSFullDuplex,&m_pDSBCapture8,&m_pDSBOutput,NULL)))
return DXTRACE_ERR_MSGBOX( TEXT("DirectSoundFullDuplexCreate8"), hr );
return S_OK;
|
|
|
|
|
I was only doing my first Dx stuff yesterday, but dont you need:
Capwfx.dwSize = sizeof(WAVEFORMATEX);
You have the equivalent for the other structures
Roger Allen - Sonork 100.10016
If your dead and reading this, then you have no life!
|
|
|
|
|
WAVEFORMATEX Capwfx;
Capwfx is an object of WAVEFORMATEX so I don't think we need to do that.
Moreover Capwfx does not have a member called dwsize..
anyhting else u can think of?
|
|
|
|
|
Hi there,
I use MFC classes for doing a data transfer with Wininet. I need to authorize me on a server: apache/1.3.27 Ben-SSL/1.48 (Unix). It needs client certification and when done correct my client app. receives a session cookie to work with. Now my problem is, for the first request I can send the client ca and the authorisation works well. But when I want to do the next request, the send request from wininet throws an internet exception and askes for the client ca again. But this time there is no cookie in the response header as the first time. So I am not quiet sure if the problem is with the client ca or the cookie. In the IE6 I have all cookies enabled. I have not found yet a way to display the protocol header of my request.
Hope somebody can help me. Below I add some code sequences to make my problem clearer.
BOOL CWinInetTransfer::DoHttpRequest (...)
{
// If Internet Session is not already established try to create it.
if (!m_pISession)
{
m_pISession = new CInternetSession ("MyUserAgent", 1, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
}
csPage.Empty();
csErrMsg.Empty();
int nVerb (CHttpConnection::HTTP_VERB_GET); // default. used to specify Method.
CString csRequestUrl;
CString csServer;
CString csObject;
DWORD dwServiceType(0);
INTERNET_PORT nPort(0); // defines port: 80 for normal HTTP, 443 for HTTPS
// always get method is used: Url + ? + Data to send.
csRequestUrl += _T("?");
csRequestUrl += csPostData;
// Parsing Url to get Server, Object and Port.
BOOL bParseUrl = AfxParseURL(csRequestUrl, dwServiceType, csServer, csObject, nPort);
UINT nbrChar;
DWORD dwRes;
CHttpConnection *pServer = NULL;
CHttpFile *pHttpFile = NULL;
try
{
pServer = m_pISession->GetHttpConnection((const char*)csServer, // pstrServer.
INTERNET_SERVICE_HTTP, // dwflags
nPort, NULL, NULL);
DWORD dwFlags (INTERNET_FLAG_NO_CACHE_WRITE | INTERNET_FLAG_RELOAD | INTERNET_FLAG_EXISTING_CONNECT);
if (nPort==INTERNET_DEFAULT_HTTPS_PORT)
{
//we are talking secure https
dwFlags |= INTERNET_FLAG_SECURE |
INTERNET_FLAG_IGNORE_CERT_CN_INVALID |
INTERNET_FLAG_IGNORE_CERT_DATE_INVALID;
}
if(pServer)
{
pHttpFile = pServer->OpenRequest(nVerb, (const char*)csObject, NULL, 1, NULL, NULL, dwFlags);
}
BOOL bSendRequestOk = FALSE;
DWORD dwReqStatusCode(0);
for(int i=0; i < 10; i++) // stop after then tries.
{
csErrMsg.Empty();
try
{
// Do Send Request
if (nTxMethod == CHttpConnection::HTTP_VERB_GET)
{
// used get Method.
bSendRequestOk = m_pHttpRequest->SendRequest();
}
// Test Send Request.
if (!bSendRequestOk)
{
return FALSE;
}
m_pHttpRequest->QueryInfoStatusCode(dwReqStatus);
if(dwReqStatus < 300)
{
// Transfer was successful.
break; // end for loop.
}
} // end try: Send Request.
catch (CInternetException* e)
{
// Error during Send request: Wininet throws Exception: exp: Client CA needed.
// Get Error Code from Exception
dwReqStatus = e->m_dwError; // Error Code.
e->Delete();
// Shows Dialog specialised for error code. This Dialog gets Client CA from system store if needed.
DWORD dwAnswer = m_pHttpRequest->ErrorDlg(pParentWnd, dwReqStatus,
FLAGS_ERROR_UI_FILTER_FOR_ERRORS |
FLAGS_ERROR_UI_FLAGS_GENERATE_DATA |
FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS, NULL);
if (dwAnswer == ERROR_CANCELLED)
{
// Abbruch durch den Benutzer.
return FALSE;
}
} // end catch: IE Exception
} // next for loop if needed.
// Send Request finished. Now verify status code. < 300 success, > 300 error.
if (dwReqStatus < 300)
{
// successful. Read is done later.
return TRUE;
}
else
{
// Error occured.
return FALSE;
}
}
|
|
|
|
|
Hi!
I need help with getting the time in
hour:min:sec:microseconds.
I'm using struct tm to get hour:min:sec(no problem)and I use the struct timeval and timespec to get microseconds, but I am doing something wrong.
Does anyone know how to do?
|
|
|
|
|
Look at a class called: http://www.capecod.net/~pbaum/date/date0.htm
It has some good work on ms.
Best Wishes and Happy Holiday's,
ez_way
|
|
|
|
|
Hi Martin!
My browser can't find the webpage
|
|
|
|
|
OK
download it from my website in 15 minutes.
http://www.digitaltcp.com/downloads/DateClass_demo.zip
Best Wishes and Happy Holiday's,
ez_way
|
|
|
|
|
HI ,
Could any one tell me if it is possible to remove the Client area and view only the non-client area in an application (single doc type),
Anand
|
|
|
|
|
simplely resize the window, such that client area is not visiable
The World is getting smaller and so are the people.
|
|
|
|