在 [XXX.idl] 中

1. 如果想在脚本语言中传递一个值,并且在dll(c代码)中修改这个值并返回的话,

这个参数必须写为:[in, out] VARIANT*

如果写成 [in, out] int* 或 [in, out] int** 都不行!

在 [c 代码] 中

1. 如果想让一个函数返回一个比如 BOOL 类型, 首先需要在 [XXX.idl] 中,

最后一个参数指定为: [out, retval] BOOL*

在 c 代码的函数中,最后一个参数指定为: BOOL *x

然后在函数里设置返回值 *x = TRUE | FALSE;

最后再 return NOERROR。

特别注意, 函数申明位置的返回值,例如: HRESULT 并不是在脚本语言中调用函数时的返回值。

同时, 每一个函数只能有一个 [out, retval], 并且要写在最后。

2. 关于函数申明时的返回值: HRESULT

可选项有:

// NOERROR - 没有错误, 表示函数本身执行过程中没遇到什么问题
// E_POINTER - 在脚本语言中会提示错误, 错误信息: 无效指针
// E_OUTOFMEMORY - 在脚本语言中会提示错误, 错误信息: 内存不够

3. 每新增一个用户函数, 需要同时在 3 个地方修改内容:

1) static const XXXVtbl PictureAPI_Vtbl = {..... 新的函数名};

2) DECLARE_INTERFACE_ (INTERFACE, IDispatch) {

STDMETHOD (新的函数名)(THIS_ const int, const int, BOOL*) PURE;

3) 在 XXX.idl 中添加新的函数说明。

笔记:用标准c写 com dll的更多相关文章

  1. java调用C/C++写的dll(转)

    源:java调用C/C++写的dll Java语言本身具有跨平台性,如果通过Java调用DLL的技术方便易用,使用Java开发前台界面可以更快速,也能带来跨平台性. Java调用C/C++写好的DLL ...

  2. TCP/IP详解学习笔记 这位仁兄写得太好了.(转载)

    TCP/IP详解学习笔记   这位仁兄写得太好了   TCP/IP详解学习笔记   这位仁兄写得太好了. http://blog.csdn.net/goodboy1881/category/20444 ...

  3. QT调用C#写的Dll

    参见: https://blog.csdn.net/weixin_42420155/article/details/81060945 C#写的dll是没有dllMain入口函数的,是一种中间语言,需要 ...

  4. 【转载】java调用C++写的DLL

    用java调用C++写的DLL一直以来都是一个比较麻烦但又很常见的问题. 我们知道,使用 JNI 调用 .dll/.so 共享类库是非常非常麻烦和痛苦的. 如果有一个现有的 .dll/.so 文件,如 ...

  5. abap调vb写的dll实现电子天平的读数(带控件版)

    废话不多说,直接上. 鉴于abap调研的dll文件需要在wins注册,自己尝试过delphi和C#感觉不是很好,最后毅然选择了VB来写 因为需要用到MScomm控件,所以对于将要写的dll需要带for ...

  6. c++ c# java 调用 c++ 写的dll

    1. vs 中新建win32 dll 项目   testdll 添加实现文件       test.cpp #include "stdafx.h" #include <ios ...

  7. 深度学习-tensorflow学习笔记(1)-MNIST手写字体识别预备知识

    深度学习-tensorflow学习笔记(1)-MNIST手写字体识别预备知识 在tf第一个例子的时候需要很多预备知识. tf基本知识 香农熵 交叉熵代价函数cross-entropy 卷积神经网络 s ...

  8. Delphi写的DLL,OCX中多线程一个同步问题

    Delphi写的DLL,OCX中如果使用了TThread.Synchronze(Proc),可能导致线程死锁,原因是无法唤醒EXE中主线程, Synchronze并不会进入EXE主线程消息队列. 下面 ...

  9. 深度学习-tensorflow学习笔记(2)-MNIST手写字体识别

    深度学习-tensorflow学习笔记(2)-MNIST手写字体识别超级详细版 这是tf入门的第一个例子.minst应该是内置的数据集. 前置知识在学习笔记(1)里面讲过了 这里直接上代码 # -*- ...

随机推荐

  1. 免费苹果账号(apple id)申请ios证书p12真机调试

    HBuilder可以直接打包越狱版的ipa包,但需要越狱手机才能安装,如果需要安装到没越狱的手机安装,需要自己申请ios证书打包. 一般是需要一个付费了的苹果开发者账号才能申请ios证书打包. 这里介 ...

  2. hive之size函数和cast转换函数

    size返回map集合中元素的个数: cast函数将一种类型的数据转换成其他格式的数据

  3. 如何在MAC上运行exe程序

    1. 首先下载并运行CrossOver 运行CrossOver需要收费,试用期为14天,运行CrossOver 2. 选择exe应用程序,新建容器,安装exe程序 3.安装成功后,运行exe应用程序启 ...

  4. python设计模式第二十天【模版方法模式】

    1.应用场景 (1)具有相同的操作,但是步骤中具有不同的操作细节 2.代码实现 #!/usr/bin/env python #! _*_ coding:UTF-8 _*_ from abc impor ...

  5. java中的缓冲流!

    package cn.zhozuohou; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; impor ...

  6. How to vi

    h:left,j:down,k:up,l:right.wq #write and quitx #cut one letterdd#cut one line/ #searchs/a/b/ #replac ...

  7. Linux环境下安装NodeJS和mongoDB

    前面的话 本文将详细介绍如何下Linux环境下安装NodeJS和mongoDB NodeJS [1]使用二进制包安装 1.在官网下载Linux环境下的NodeJS安装包 2.通过xftp软件将安装包上 ...

  8. codeforces493B

    Vasya and Wrestling CodeForces - 493B Vasya has become interested in wrestling. In wrestling wrestle ...

  9. 小程序 official-account

    只需要在页面中添加 <official-account></official-account> 需要注意的是: 1.当小程序从扫二维码场景(场景值1011)打开时 2.当小程序 ...

  10. LOJ2116 [HNOI2015] 开店 【点分治】

    题目分析: 观察题目发现度数不小于三,考虑从边分治入手,用点分治代替.将树划分成重心链接的结构,称为点分树.令当前询问的点为$ u $.那么我们考虑点分树的根到$ u $的一条路径.考虑根结点,排除掉 ...