|
if SomeFunc is on the DLL, you have to dllexport it when generating the DLL and dllimport when generating the EXE.
If it is an MFC extension DLL, you can use the AFX_EXT_CLASS macro, for example:
class AFX_EXT_CLASS CMyDlg : public CDialog
{
};
Jaime
|
|
|
|
|
Somefunc is in the EXE.
class CDervDlg : public CDialog
{
void TestLoad();
void SomeFunc(CString, CString);
BOOL m_SomeVar;
};
typedef int (*SCGptr)(CDervDlg *);
void TestLoad()
{
HINSTANCE inst = AfxLoadLibrary("testlib.dll");
SCGptr Startfunc = (SCGptr)GetProcAddress(inst, "?Start@@YAHPAVCDervDlg@@@Z");
if (Startfunc != NULL)
Startfunc(this);
}
#include "DervDlg.h"
__declspec(dllexport) int Start(CDervDlg *dlg)
{
dlg->m_SomeVar = TRUE;
dlg->SomeFunc("Blah", "Blah");
}
Thank you for helping.
|
|
|
|
|
In DLL you have to declare:
class __declspect(dllimport) CDervDlg : public CDialog
{
void TestLoad();
void SomeFunc(CString, CString);
BOOL m_SomeVar;
};
and in EXE:
class __declspect(dllexport) CDervDlg : public CDialog
{
void TestLoad();
void SomeFunc(CString, CString);
BOOL m_SomeVar;
};
In your DLL you are using a function declared in the EXE, that's why you need to export from the EXE, and import it into the DLL.
Jaime
|
|
|
|
|
Thank you very much. It works now.
|
|
|
|
|
Hello,
In terms of performance, good programming, etc, is it better to derive [customized] classes from CDatabase and CRecordSet or is it preferable to build our own from scratch? What do you think about this?
What I am trying to know is whether a Database Programmer finds all the functionalities he/she needs in these MFC classes or whether they'd be better off creating their own from scratch.
All insights on the subject are very much appreciated.
Thank you,
David
|
|
|
|
|
AFAIK CDatabase, CRectordset, etc, connects to a database by using ODBC driver, and that way of connection is always slower than accessing directly database native driver, as it adds other layer to the database connection. They are easy to use, bad provide poor performance.
To connect to database I programmed my own class named CDatabase that encapsulates all database connection using ADO.
It's known that by using ADO, the program doesn't access directly the database driver, but it's only one layer over the OLEDB driver, being a good choice (and easy choice) to access a database.
Jaime
|
|
|
|
|
But what kind of database(s) do you usually use? MsAccess and the likes, or Oracle/... ?
I am asking this because I heard something before about the ADO technology only allowing you to connect to the Microsoft Jet -type databases. Is this right?
dNimrod#X
________________________
|
|
|
|
|
it's wrong. ADO can connect to any database that has supporting driver installed in the system. I have used it in Access (Microsoft Jet), SQL Server (SQLOLEDB) and Oracle (MSDAORA)
Jaime
|
|
|
|
|
I see! I hope you'll bear with me, I am a newbee in database programming...
Let me ask you though, is there any MFC class supporting ADODB connections?, I've been searching but found none...
For what I could see, ADODB connections are a form of interacting with databases through OLE ?
|
|
|
|
|
MFC doesn't provide a class for connecting to database using ADODB, that's why I programmed my own CDatabase class that #imports the ADO DLL to use the wrapper classes, and call the more common methods, for example, Execute to execute a query.
In order to fully understand, you need knowledge on COM technology.
I think here in codeproject you may be able to find info on this topic (in www.google.cl you can find a lot of stuff, for sure)
Jaime
|
|
|
|
|
Thanks a lot for all the input, Eduardo!
Cheers,
David
|
|
|
|
|
you are welcome... but my name isn't Eduardo, it is Jaime, and my surname Stuardo
|
|
|
|
|
I am sorry for having mixed up your name, Jaime!
Again, thanks for the help!
David
|
|
|
|
|
I haven't used the MFC database classes for quiet a few years. I much prefer to use ADO.
There are some nice wrapper classes here[^]
Michael
CP Blog [^]
|
|
|
|
|
hi!
i'm a newbie to MFC socket functions, pls help =)
i have an existing dialog based MFC project. now i need to add this function: receive text from another PC and reflect it on my user interface.
is there a simple way this can be done? i wonder if anyone has done something similar?
|
|
|
|
|
pork chop wrote:
is there a simple way this can be done
"simple" is relative
pork chop wrote:
i wonder if anyone has done something similar
Is that a rhetorical question? Of course they have.
pork chop wrote:
receive text from another PC and reflect it on my user interface
Well I assume you know how to "reflect text on your user interface" so that just leaves "receive text from another PC". Unfortunately that does not provide anywhere near enough information for anyone to begin helping you.
"No matter where you go, there your are." - Buckaroo Banzai
-pete
|
|
|
|
|
Helo everyone,
I'm building a MDI App and I want to open an specific view once only from CMDIFrameWnd, and detect if this view is open to activate.
Ivan Cachicatari
www.latindevelopers.com
|
|
|
|
|
For that document types OnNewDocument()
CDocTemplate *pTemplate = GetDocTemplate();
POSITION pos = pTemplate->GetFirstDocPosition();
if (pos != NULL)
{
// a document of this type exists already!
// need to get its view and then call MDIActive on it
// and return FALSE
}
If you vote me down, my score will only get lower
|
|
|
|
|
<br />
<br />
<br />
#include "Utility.h"<br />
#include <Af_irda.h><br />
<br />
#define IRDA_DEVICE_LIST_LEN 16<br />
#define IRDA_TRY_COUNT 30<br />
#define IRDA_TRY_SLEEP_MSEC 1000<br />
<br />
int DevListLen = sizeof(DEVICELIST) <br />
* IRDA_DEVICE_LIST_LEN;<br />
<br />
int EnumTest(void);<br />
PDEVICELIST EnumIrdaDevices(void);<br />
BOOL EnumIrdaDevicesTest(void);<br />
<br />
int ExecuteIrdaEnumTest(void)<br />
{<br />
int result;<br />
result = EnumIrdaDevicesTest();<br />
<br />
return result;<br />
}<br />
<br />
int EnumIrdaDevicesTest(void)<br />
{<br />
int iDeviceCount;<br />
PDEVICELIST pDevList;<br />
<br />
int iTryCount = 0;<br />
int iDeviceIndex = 0;<br />
<br />
char* scs = "|/-\\|/-\\";
short scsLen = (short)strlen(scs);<br />
int schrIndex = 0;<br />
<br />
printf("Searching for infra-red devices in range... ");<br />
for (; iTryCount < IRDA_TRY_COUNT; iTryCount++)<br />
{<br />
if ((pDevList = EnumIrdaDevices()) != NULL)<br />
break;<br />
<br />
schrIndex %= scsLen;<br />
printf("\b%c", scs[schrIndex++]);<br />
<br />
free(pDevList);<br />
Sleep(IRDA_TRY_SLEEP_MSEC);<br />
}<br />
<br />
if (pDevList)<br />
{<br />
printf("\n\n#%u device(s) has been found, enumerating...\n\n", pDevList->numDevice);<br />
iDeviceCount = (int)pDevList->numDevice;<br />
for (; iDeviceIndex < iDeviceCount; iDeviceIndex++)<br />
{<br />
printf("Device Info #%u :\n", (iDeviceIndex + 1));<br />
printf(" Name: %s\n\n" , pDevList->Device[iDeviceIndex].irdaDeviceName);<br />
}<br />
}<br />
<br />
free(pDevList);<br />
return (pDevList != NULL) <br />
? BE_SUCCESS<br />
: BE_ERROR;<br />
}<br />
<br />
PDEVICELIST EnumIrdaDevices(void)<br />
{<br />
int iResult;<br />
u_long index = 0;<br />
SOCKET sock;<br />
PDEVICELIST pDevList;<br />
<br />
sock = WSASocket(AF_IRDA, SOCK_STREAM, 0, NULL, 0, <br />
WSA_FLAG_OVERLAPPED);<br />
<br />
pDevList = (PDEVICELIST) malloc(sizeof(DEVICELIST) * DevListLen);<br />
<br />
pDevList->numDevice = 0;<br />
iResult = getsockopt(sock, SOL_IRLMP, IRLMP_ENUMDEVICES, <br />
(char *)pDevList, &DevListLen);<br />
<br />
<br />
if (pDevList->numDevice > 0)<br />
return pDevList;<br />
else<br />
{<br />
free(pDevList);<br />
pDevList = 0;<br />
return NULL;<br />
}<br />
}<br />
your life is what you believe
|
|
|
|
|
You only free pDevList if nothing is found.
You must have a pointer, linked list etc. in the calling function so the calling function can free memory after it is finised with the list.
Elaine
The tigress is here
|
|
|
|
|
Hello,can anyone help please(my second for today),
How can i open a file(for exemple d:\Temp\log.txt) through pushing a button in my MFC project?
Thank you all!
Johnny
|
|
|
|
|
Call ShellExecute with operation "open"
Papa
while (TRUE)
Papa.WillLove ( Bebe ) ;
|
|
|
|
|
|
Thank you very much!!!
It works!
Johnny
|
|
|
|
|
Are you wanting to know how to:
1) respond to a button click
2) open the file using its associated application
3) open the file within your application
"When I was born I was so surprised that I didn't talk for a year and a half." - Gracie Allen
|
|
|
|