主程序用delphi, 数据库用java, 两个dll分别用vc和bcb写的,运行过程如下:(1)delphi主程序调用bcb的dll, 将查询参数通过JNI传递给JAVA代码模块;(2)JAVA代码模块完成查询将查询结果通过JNI传递给VC的DLL, (3)VC的DLL发送消息给DELPHI主程序!
经过调试证明(1), (2)两个过程是正确的,但是(3)发送消息时有错误,DELPHI接收到消息要比预想的慢!如果将(3)中VC的DLL改成EXE, 则DELPHI能及时收到消息!示例代码如下///////////////////////////////////////////////////////////////////////////////
// EXE模式
///////////////////////////////////////////////////////////////////////////////void SendMsgToReceiver()
{
DWORD MsgID, i;
HWND ReceiveHwnd;
SYSTEMTIME NowTime;
char MsgBuffer[255];
char FileName[]="D:\\sender.txt"; DeleteFile(FileName);
MsgID = RegisterWindowMessage("SEARCH_MSG");
ReceiveHwnd = FindWindow(NULL, "Target");
PostMessage(ReceiveHwnd, MsgID, -1, 0);
for(i = 0; i < 99; i++)
{
PostMessage(ReceiveHwnd, MsgID, i, 0);
GetSystemTime(&NowTime);
sprintf(MsgBuffer, "SENDER: %3d---%2d:%2d",
i, NowTime.wMinute, NowTime.wSecond);
SaveInforToFile(FileName, MsgBuffer);
}
}///////////////////////////////////////////////////////////////////////////////
// DLL模式
///////////////////////////////////////////////////////////////////////////////
JNIEXPORT void JNICALL Java_Search_SendMsgToGole_Dll
(JNIEnv *env, jobject obj, jstring ResultString, jint wParam)
{
char MsgBuffer[255];
DWORD MsgID;
HWND ReceiveHwnd;
SYSTEMTIME NowTime;
const char* szStr = (*env).GetStringUTFChars(ResultString, 0);
const char* FileName = "D:\\send.txt"; GetSystemTime(&NowTime);
sprintf(MsgBuffer, "SEND: %50s--%3d---%2d:%2d", szStr,
wParam, NowTime.wMinute, NowTime.wSecond);
SaveInforToFile(FileName, MsgBuffer);
MsgID = RegisterWindowMessage("SEARCH_MSG");
ReceiveHwnd = FindWindow(NULL, "Target");
PostMessage(ReceiveHwnd, MsgID, wParam, 0);
(*env).GetStringUTFChars(ResultString, (unsigned char *)szStr);
}还函数被JAVA循环调用!
经过调试证明(1), (2)两个过程是正确的,但是(3)发送消息时有错误,DELPHI接收到消息要比预想的慢!如果将(3)中VC的DLL改成EXE, 则DELPHI能及时收到消息!示例代码如下///////////////////////////////////////////////////////////////////////////////
// EXE模式
///////////////////////////////////////////////////////////////////////////////void SendMsgToReceiver()
{
DWORD MsgID, i;
HWND ReceiveHwnd;
SYSTEMTIME NowTime;
char MsgBuffer[255];
char FileName[]="D:\\sender.txt"; DeleteFile(FileName);
MsgID = RegisterWindowMessage("SEARCH_MSG");
ReceiveHwnd = FindWindow(NULL, "Target");
PostMessage(ReceiveHwnd, MsgID, -1, 0);
for(i = 0; i < 99; i++)
{
PostMessage(ReceiveHwnd, MsgID, i, 0);
GetSystemTime(&NowTime);
sprintf(MsgBuffer, "SENDER: %3d---%2d:%2d",
i, NowTime.wMinute, NowTime.wSecond);
SaveInforToFile(FileName, MsgBuffer);
}
}///////////////////////////////////////////////////////////////////////////////
// DLL模式
///////////////////////////////////////////////////////////////////////////////
JNIEXPORT void JNICALL Java_Search_SendMsgToGole_Dll
(JNIEnv *env, jobject obj, jstring ResultString, jint wParam)
{
char MsgBuffer[255];
DWORD MsgID;
HWND ReceiveHwnd;
SYSTEMTIME NowTime;
const char* szStr = (*env).GetStringUTFChars(ResultString, 0);
const char* FileName = "D:\\send.txt"; GetSystemTime(&NowTime);
sprintf(MsgBuffer, "SEND: %50s--%3d---%2d:%2d", szStr,
wParam, NowTime.wMinute, NowTime.wSecond);
SaveInforToFile(FileName, MsgBuffer);
MsgID = RegisterWindowMessage("SEARCH_MSG");
ReceiveHwnd = FindWindow(NULL, "Target");
PostMessage(ReceiveHwnd, MsgID, wParam, 0);
(*env).GetStringUTFChars(ResultString, (unsigned char *)szStr);
}还函数被JAVA循环调用!
// EXE 模式 || DLL模式
////////////////////////////////////////////////////////////////////////////////////
SEND: 0---57:18 RECEIVE: 0---57:18 || SEND: 0---50:24 RECEIVE: 0---50:27
SEND: 1---57:18 RECEIVE: 1---57:18 || SEND: 1---50:24 RECEIVE: 1---50:27
SEND: 2---57:18 RECEIVE: 2---57:18 || SEND: 2---50:24 RECEIVE: 2---50:27
SEND: 3---57:18 RECEIVE: 3---57:18 || SEND: 3---50:24 RECEIVE: 3---50:27
SEND: 4---57:18 RECEIVE: 4---57:18 || SEND: 4---50:24 RECEIVE: 4---50:27
SEND: 5---57:18 RECEIVE: 5---57:18 || SEND: 5---50:24 RECEIVE: 5---50:27
SEND: 6---57:18 RECEIVE: 6---57:18 || SEND: 6---50:24 RECEIVE: 6---50:27
SEND: 7---57:18 RECEIVE: 7---57:18 || SEND: 7---50:24 RECEIVE: 7---50:27
SEND: 8---57:18 RECEIVE: 8---57:18 || SEND: 8---50:24 RECEIVE: 8---50:27
SEND: 9---57:18 RECEIVE: 9---57:18 || SEND: 9---50:24 RECEIVE: 9---50:27
SEND: 10---57:18 RECEIVE: 10---57:18 || SEND: 10---50:24 RECEIVE: 10---50:27
SEND: 11---57:18 RECEIVE: 11---57:18 || SEND: 11---50:24 RECEIVE: 11---50:27
SEND: 12---57:18 RECEIVE: 12---57:18 || SEND: 12---50:24 RECEIVE: 12---50:27
SEND: 13---57:18 RECEIVE: 13---57:18 || SEND: 13---50:24 RECEIVE: 13---50:27
SEND: 14---57:18 RECEIVE: 14---57:18 || SEND: 14---50:24 RECEIVE: 14---50:27
SEND: 15---57:18 RECEIVE: 15---57:18 || SEND: 15---50:24 RECEIVE: 15---50:27
SEND: 16---57:18 RECEIVE: 16---57:18 || SEND: 16---50:24 RECEIVE: 16---50:27
SEND: 17---57:18 RECEIVE: 17---57:18 || SEND: 17---50:24 RECEIVE: 17---50:28
SEND: 18---57:18 RECEIVE: 18---57:18 || SEND: 18---50:24 RECEIVE: 18---50:28
SEND: 19---57:18 RECEIVE: 19---57:18 || SEND: 19---50:24 RECEIVE: 19---50:28
SEND: 20---57:18 RECEIVE: 20---57:18 || SEND: 20---50:24 RECEIVE: 20---50:28
SEND: 21---57:18 RECEIVE: 21---57:18 || SEND: 21---50:24 RECEIVE: 21---50:28
SEND: 22---57:18 RECEIVE: 22---57:18 || SEND: 22---50:24 RECEIVE: 22---50:28
SEND: 23---57:18 RECEIVE: 23---57:18 || SEND: 23---50:25 RECEIVE: 23---50:28
SEND: 24---57:19 RECEIVE: 24---57:19 || SEND: 24---50:25 RECEIVE: 24---50:28
SEND: 25---57:19 RECEIVE: 25---57:19 || SEND: 25---50:25 RECEIVE: 25---50:28
SEND: 26---57:19 RECEIVE: 26---57:19 || SEND: 26---50:25 RECEIVE: 26---50:28
SEND: 27---57:19 RECEIVE: 27---57:19 || SEND: 27---50:25 RECEIVE: 27---50:28
SEND: 28---57:19 RECEIVE: 28---57:19 || SEND: 28---50:25 RECEIVE: 28---50:28
SEND: 29---57:19 RECEIVE: 29---57:19 || SEND: 29---50:25 RECEIVE: 29---50:28
SEND: 30---57:19 RECEIVE: 30---57:19 || SEND: 30---50:25 RECEIVE: 30---50:28
SEND: 31---57:19 RECEIVE: 31---57:19 || SEND: 31---50:25 RECEIVE: 31---50:28
SEND: 32---57:19 RECEIVE: 32---57:19 || SEND: 32---50:25 RECEIVE: 32---50:28
SEND: 33---57:19 RECEIVE: 33---57:19 || SEND: 33---50:25 RECEIVE: 33---50:28
SEND: 34---57:19 RECEIVE: 34---57:19 || SEND: 34---50:25 RECEIVE: 34---50:28
SEND: 35---57:19 RECEIVE: 35---57:19 || SEND: 35---50:25 RECEIVE: 35---50:28
SEND: 36---57:19 RECEIVE: 36---57:19 || SEND: 36---50:25 RECEIVE: 36---50:28
SEND: 37---57:19 RECEIVE: 37---57:19 || SEND: 37---50:25 RECEIVE: 37---50:28
SEND: 38---57:19 RECEIVE: 38---57:19 || SEND: 38---50:25 RECEIVE: 38---50:28
SEND: 39---57:19 RECEIVE: 39---57:19 || SEND: 39---50:25 RECEIVE: 39---50:28
SEND: 40---57:19 RECEIVE: 40---57:19 || SEND: 40---50:25 RECEIVE: 40---50:28
SEND: 41---57:19 RECEIVE: 41---57:19 || SEND: 41---50:25 RECEIVE: 41---50:28
SEND: 42---57:19 RECEIVE: 42---57:19 || SEND: 42---50:25 RECEIVE: 42---50:28
SEND: 43---57:19 RECEIVE: 43---57:19 || SEND: 43---50:25 RECEIVE: 43---50:28
SEND: 44---57:19 RECEIVE: 44---57:19 || SEND: 44---50:25 RECEIVE: 44---50:28
SEND: 45---57:19 RECEIVE: 45---57:19 || SEND: 45---50:25 RECEIVE: 45---50:28
SEND: 46---57:19 RECEIVE: 46---57:19 || SEND: 46---50:25 RECEIVE: 46---50:28
SEND: 47---57:19 RECEIVE: 47---57:19 || SEND: 47---50:25 RECEIVE: 47---50:28
SEND: 48---57:19 RECEIVE: 48---57:19 || SEND: 48---50:25 RECEIVE: 48---50:28
SEND: 49---57:19 RECEIVE: 49---57:19 || SEND: 49---50:25 RECEIVE: 49---50:28
SEND: 50---57:19 RECEIVE: 50---57:19 || SEND: 50---50:25 RECEIVE: 50---50:28
SEND: 51---57:19 RECEIVE: 51---57:19 || SEND: 51---50:25 RECEIVE: 51---50:28
SEND: 52---57:19 RECEIVE: 52---57:19 || SEND: 52---50:25 RECEIVE: 52---50:28
SEND: 53---57:19 RECEIVE: 53---57:19 || SEND: 53---50:25 RECEIVE: 53---50:28
SEND: 54---57:19 RECEIVE: 54---57:19 || SEND: 54---50:25 RECEIVE: 54---50:28
SEND: 55---57:19 RECEIVE: 55---57:19 || SEND: 55---50:25 RECEIVE: 55---50:28
SEND: 56---57:19 RECEIVE: 56---57:19 || SEND: 56---50:25 RECEIVE: 56---50:28
SEND: 57---57:19 RECEIVE: 57---57:19 || SEND: 57---50:25 RECEIVE: 57---50:28
SEND: 58---57:19 RECEIVE: 58---57:19 || SEND: 58---50:25 RECEIVE: 58---50:28
SEND: 59---57:19 RECEIVE: 59---57:19 || SEND: 59---50:26 RECEIVE: 59---50:28
SEND: 60---57:19 RECEIVE: 60---57:19 || SEND: 60---50:26 RECEIVE: 60---50:28
SEND: 61---57:19 RECEIVE: 61---57:19 || SEND: 61---50:26 RECEIVE: 61---50:28
SEND: 62---57:19 RECEIVE: 62---57:19 || SEND: 62---50:26 RECEIVE: 62---50:28
SEND: 63---57:20 RECEIVE: 63---57:20 || SEND: 63---50:26 RECEIVE: 63---50:28
SEND: 64---57:20 RECEIVE: 64---57:20 || SEND: 64---50:26 RECEIVE: 64---50:28
SEND: 65---57:20 RECEIVE: 65---57:20 || SEND: 65---50:26 RECEIVE: 65---50:28
SEND: 66---57:20 RECEIVE: 66---57:20 || SEND: 66---50:26 RECEIVE: 66---50:28
SEND: 67---57:20 RECEIVE: 67---57:20 || SEND: 67---50:26 RECEIVE: 67---50:28
SEND: 68---57:20 RECEIVE: 68---57:20 || SEND: 68---50:26 RECEIVE: 68---50:28
SEND: 69---57:20 RECEIVE: 69---57:20 || SEND: 69---50:26 RECEIVE: 69---50:28
SEND: 70---57:20 RECEIVE: 70---57:20 || SEND: 70---50:26 RECEIVE: 70---50:28
SEND: 71---57:20 RECEIVE: 71---57:20 || SEND: 71---50:26 RECEIVE: 71---50:28
SEND: 72---57:20 RECEIVE: 72---57:20 || SEND: 72---50:26 RECEIVE: 72---50:28
SEND: 73---57:20 RECEIVE: 73---57:20 || SEND: 73---50:26 RECEIVE: 73---50:28
SEND: 74---57:20 RECEIVE: 74---57:20 || SEND: 74---50:26 RECEIVE: 74---50:28
SEND: 75---57:20 RECEIVE: 75---57:20 || SEND: 75---50:26 RECEIVE: 75---50:28