输入问题?主程序与所要调用的dll如何互相调用数据???

时间:2021-04-19 20:14:35
本人做了一个主程序(exe文件),现调用一dll(没什么问题),但是不知道如何能够实现dll与exe互相调用数据。个人觉得应该写一些共有接口函数,但又不知道如何写。其实这个问题类似于:AutoCAD提供二次开发,他其实就是AutoCAD调用一个dll(Arx编写),然后他们就能很好的知道共同的数据。麻烦高手指点,在线等!

12 个解决方案

#1


楼主举个例子吧问题具体化一点吧。

从具体化的例子开始,再来讨论更通用的解决方案更好一点

#2


不懂唉

你要读取矢量信息的话就去http://www.opendwg.org下载一个dll   
  就可以读取了。

参考:http://topic.csdn.net/t/20030508/02/1753400.html

#3


谢谢你们的关注,这个问题可以这么理解:有两个运用程序,这两个运用程序要共享一套数据。这该如何实现?如果可以有代码就更好了,期待ing

#4


1) 公享数据段

2) File Mapping (推荐)

3) Socket

#5


我也刚找到File Mapping,麻烦问问楼上的CreateFileMapping如何用阿?
找不到例子

#6


谁知道文件映射对象如何用,最好给段代码,不胜感激,在线等待!

#7


File mapping 是和 剪切板的功能类似不? study

#8


HANDLE hFile = CreateFile("c:\\octopus.txt",GENERIC_READ|GENERIC_WRITE,
                               FILE_SHARE_READ|FILE_SHARE_WRITE,
                               NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
    cout<<"Last Error Code: "<<GetLastError()<<endl;
    if(hFile!=INVALID_HANDLE_VALUE)
    {
        MessageBox(NULL,"CreateFunction OK!","error!",MB_OK);
    }
    cout<<"error code: "<<GetLastError()<<endl;
    HANDLE hFileMap = CreateFileMapping(hFile,NULL,PAGE_READWRITE,0,100,NULL);
    cout<<"Last Error Code: "<<GetLastError()<<endl;
    BYTE *pbFile,somebyte;
    pbFile = (PBYTE)MapViewOfFile(hFileMap,FILE_MAP_WRITE,0,0,0);
    pbFile[0] = 97;
    pbFile[1] = 65;
    somebyte = pbFile[0];
    cout<<"somebyte"<<somebyte<<endl;
    
    CloseHandle(hFileMap);
    CloseHandle(hFile);
这个是FileMapping的简单代码,不知道对你有没有用,还是贴上来吧,不过如果楼主要用FileMapping最好把Win32帮助文档好好看看,要不然可能会有很多非常奇怪的错误.

#9


MSND上就有一个简单的例子的.同一台机器上不同进程之间的数据同步都是基于内存映射文件来实现的,建议用这个.

#10


DLL和EXE通讯,不用搞得太复杂算了,直接用SOCKET通讯
呵呵

#11


socket???? 真是杀鸡用牛到

pipe,clipboard, filemapping, named pipe, mailslot 那个都比socket方便

#12


谢谢大家关注,结贴给分

#1


楼主举个例子吧问题具体化一点吧。

从具体化的例子开始,再来讨论更通用的解决方案更好一点

#2


不懂唉

你要读取矢量信息的话就去http://www.opendwg.org下载一个dll   
  就可以读取了。

参考:http://topic.csdn.net/t/20030508/02/1753400.html

#3


谢谢你们的关注,这个问题可以这么理解:有两个运用程序,这两个运用程序要共享一套数据。这该如何实现?如果可以有代码就更好了,期待ing

#4


1) 公享数据段

2) File Mapping (推荐)

3) Socket

#5


我也刚找到File Mapping,麻烦问问楼上的CreateFileMapping如何用阿?
找不到例子

#6


谁知道文件映射对象如何用,最好给段代码,不胜感激,在线等待!

#7


File mapping 是和 剪切板的功能类似不? study

#8


HANDLE hFile = CreateFile("c:\\octopus.txt",GENERIC_READ|GENERIC_WRITE,
                               FILE_SHARE_READ|FILE_SHARE_WRITE,
                               NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
    cout<<"Last Error Code: "<<GetLastError()<<endl;
    if(hFile!=INVALID_HANDLE_VALUE)
    {
        MessageBox(NULL,"CreateFunction OK!","error!",MB_OK);
    }
    cout<<"error code: "<<GetLastError()<<endl;
    HANDLE hFileMap = CreateFileMapping(hFile,NULL,PAGE_READWRITE,0,100,NULL);
    cout<<"Last Error Code: "<<GetLastError()<<endl;
    BYTE *pbFile,somebyte;
    pbFile = (PBYTE)MapViewOfFile(hFileMap,FILE_MAP_WRITE,0,0,0);
    pbFile[0] = 97;
    pbFile[1] = 65;
    somebyte = pbFile[0];
    cout<<"somebyte"<<somebyte<<endl;
    
    CloseHandle(hFileMap);
    CloseHandle(hFile);
这个是FileMapping的简单代码,不知道对你有没有用,还是贴上来吧,不过如果楼主要用FileMapping最好把Win32帮助文档好好看看,要不然可能会有很多非常奇怪的错误.

#9


MSND上就有一个简单的例子的.同一台机器上不同进程之间的数据同步都是基于内存映射文件来实现的,建议用这个.

#10


DLL和EXE通讯,不用搞得太复杂算了,直接用SOCKET通讯
呵呵

#11


socket???? 真是杀鸡用牛到

pipe,clipboard, filemapping, named pipe, mailslot 那个都比socket方便

#12


谢谢大家关注,结贴给分