主程序用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.   

    以下是针对(3)分别采用EXE和DLL的调试结果!////////////////////////////////////////////////////////////////////////////////////
    //                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
      

  2.   

    从调试结果可以看出DLL模式发送消息明显慢了好多!这是为什么?请指教!
      

  3.   

    另外, DELPHI里面是采用TApplicationEvents-->ApplicationEventsMessage来接收消息的!
      

  4.   

    我想这是理所当然的,你说Exe线程往另外一个线程发消息快,还是Exe线程通过DLL线程往另外一个发快?
      

  5.   

    我没有具体试过,只是猜测。我的意思是,与用exe文件调用具有发消息功能函数的DLL文件向另外一个程序法消息相比,直接用exe文件发消息到另外一个程序应该快些啊。
      

  6.   

    http://expert.csdn.net/Expert/topic/1573/1573546.xml?temp=.9672815看看这,关于DLL的帖子