win_a.cpp

  name="google_ads_frame" marginwidth="0" marginheight="0" src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-5572165936844014&dt=1194442938015&lmt=1194190197&format=336x280_as&output=html&correlator=1194442937843&url=file%3A%2F%2F%2FC%3A%2FDocuments%2520and%2520Settings%2Flhh1%2F%E6%A1%8C%E9%9D%A2%2FCLanguage.htm&color_bg=FFFFFF&color_text=000000&color_link=000000&color_url=FFFFFF&color_border=FFFFFF&ad_type=text&ga_vid=583001034.1194442938&ga_sid=1194442938&ga_hid=1942779085&flash=9&u_h=768&u_w=1024&u_ah=740&u_aw=1024&u_cd=32&u_tz=480&u_java=true" frameborder="0" width="336" scrolling="no" height="280" allowtransparency="allowtransparency"> #include <windows.h>
#include <stdio.h>
#include <stdlib.h>

void main(void)
 {
    char szBuffer[MAX_PATH+100];
    UINT nDrive = 0;
    DWORD dwLogicalDrives = GetLogicalDrives();

  if ( dwLogicalDrives & (1 << nDrive) )
     { // Is drive available?
        UINT  uType;                 // type of drive.

        // Get disk information.
        wsprintf( szBuffer, "%c://", nDrive+'A' );
        uType = GetDriveType(szBuffer);

        // Print out information.
        wsprintf(&szBuffer[3], " Type: %s, ",
                  (uType == DRIVE_REMOVABLE) ? "FLOPPY" :
                              ((uType == DRIVE_FIXED) ?  "HARD DISK" :
                              ((uType == DRIVE_REMOTE) ? "NETWORK" :
                              ((uType == DRIVE_CDROM) ?  "CDROM" :
                              ((uType == DRIVE_RAMDISK) ? "RAMDISK" :
                              ((uType == 1) ? "DOES NOT EXIST" :
                              "UNKNOWN DRIVE TYPE" ))))));
        printf("%s/n", szBuffer);
      }
     else
      {
       wsprintf(szBuffer, "%c://", nDrive+'A');
       printf("%s not available", szBuffer);
      }
}

在 MATLAB 中编译 MEX 函数并链接外部库(如 VRDDS)需要正确设置包含路径、库路径以及链接器参数。用户提供的命令涉及 `sfun_dds_send.cpp` 和 `vrdds_wrapper.cpp` 两个源文件,同时需要引用头文件路径 `../../../simulink/include` 和库路径 `./host/win64/lib`,并链接 VRDDS 库。 ### 编译 MEX 函数的命令结构 MATLAB 提供了 `mex` 命令用于编译 C/C++ 源代码为 MEX 文件。该命令支持指定头文件路径 (`-I`)、库路径 (`-L`) 和链接库 (`-l`) 等选项。 ```matlab mex -I../../../simulink/include -L./host/win64/lib -lVRDDS sfun_dds_send.cpp vrdds_wrapper.cpp ``` 上述命令中: - `-I../../../simulink/include` 指定了头文件搜索路径; - `-L./host/win64/lib` 指定了库文件的搜索路径; - `-lVRDDS` 表示链接名为 `VRDDS` 的库(系统会自动查找 `libVRDDS.so` 或 `VRDDS.lib` 等对应平台的库文件); - `sfun_dds_send.cpp` 和 `vrdds_wrapper.cpp` 是要编译的源文件。 ### Windows 平台上的注意事项 如果当前环境是 Windows 平台(根据路径 `./host/win64/lib` 推测),则需确保以下几点: 1. **DLL 路径配置**:即使 `.lib` 文件已正确链接,运行时仍需对应的 `.dll` 文件位于系统路径或当前工作目录中。 2. **MEX 编译器兼容性**:使用与 MATLAB 版本兼容的 Microsoft Visual Studio 编译器版本,并通过 `mex -setup C++` 设置正确的编译器。 3. **依赖项管理**:若 VRDDS 库依赖其他第三方库(如 OpenCV、Boost 等),也应一并加入到链接参数中,否则可能导致运行时错误[^3]。 ### 示例:完整 MEX 编译命令 假设 VRDDS 依赖于 `opencv_core` 和 `boost_system`,可扩展命令如下: ```matlab mex -I../../../simulink/include -L./host/win64/lib -lVRDDS -lopencv_core -lboost_system sfun_dds_send.cpp vrdds_wrapper.cpp ``` 此方式适用于所有依赖库均已在指定库路径中存在的情况。 ### 静态库与动态库的选择 若使用的是静态库(`.a` 或 `.lib`),需确保其构建方式与当前 MEX 编译器一致(例如都为 Release 或 Debug 模式)。若使用动态库(`.dll`),则只需提供 `.lib` 导入库进行链接,实际调用时加载 `.dll` 文件即可。 ### 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值