我想设计一个C.dll,A、B两个软件都可以调用,
1:当A调用C.dll时,C.dll启动,并且想C.dll传输数据。
2:当B调用C.dll时(A程序不运行),A程序自动启动,并且向C.dll传送数据,供B使用
请问这样的C.dll怎么设计啊?
主要是第二点想不明白。
谢谢 
有一点我知道,就是在使用数据的时候需要内存共享。
暂时给100分,不够再加!

解决方案 »

  1.   

    这个设计恐怕比较复杂,主要b要等待a的传递数据
    至于a自动启动,可以在c.dll中判断a是否已经启动(比如可以用互斥),如果还没有启动,则启动a:CreateProcess
      

  2.   

    谢谢 flyelf(空谷清音)的回答,您能够说的详细一点吗?
    或者给一点“a:CreateProcess“的代码范例?
    ”主要b要等待a的传递数据“,这个我考虑过,用消息通知和内存共享可以解决的。
      

  3.   

    我觉得难点在于怎么监控b调用了c.dll。
    dll中启动a倒简单
      

  4.   

    不需要监控啊!因为A程序是我写的,B是第三方已经提供的软件,他有公用的接口函数调用c.dll,只要我写的c.dll名称和函数名一样就可以了。
    哪位仁兄能详细说说如何在dll中启动A吗?
      

  5.   

    在c.dll中的DLLMain中GetModuleFileName(NULL,....)判断调用此程序的应用程序是,判断A是否已经启动!
      

  6.   

    如果没启动则调用CreateProcess启动之。
      

  7.   

    自动启动进程可以用CreateProcess,ShellExecute,WinExec等都可以啊
    这个实现不难
      

  8.   

    CreateProcess(NULL,"A.exe",NULL,NULL,TRUE,0,NULL,NULL,&sui,&pi);
    具体参数参考一下msdn
      

  9.   

    ZeroMemory( @si, sizeof(si) );
        si.cb := sizeof(si);
        si.wShowWindow:=SW_MINIMIZE;//SW_MINIMIZE;
        si.dwFlags:=DEBUG_PROCESS;
        ZeroMemory( @pi, sizeof(pi) );   result:=CreateProcess( PChar(ExtractFilePath(application.exename)+'BarCodeReader.exe'), // No module name (use command line).
            nil, // Command line.
            nil,             // Process handle not inheritable.
            nil,             // Thread handle not inheritable.
            FALSE,            // Set handle inheritance to FALSE.
            0,                // No creation flags.
            nil,             // Use parent's environment block.
            nil,             // Use parent's starting directory.
            si,              // Pointer to STARTUPINFO structure.
            pi )             // Pointer to PROCESS_INFORMATION structure.        ;
      

  10.   

    DentistryDoctor(牙科医生)最好,就在DllMain中定义。