Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >COM Server:(尤指调用接口方法时未通过函数调用保存)

COM Server:(尤指调用接口方法时未通过函数调用保存)
EN

Stack Overflow用户
提问于 2012-10-29 11:18:11
回答 1查看 302关注 0票数 2

我正在EXE文件中实现COM服务器。准确地说,我正在向现有的应用程序中添加一个COM接口。最终目标是自动化应用程序。

第一个组件和一个接口(到目前为止只有一个方法)基本上已经就位。我可以在DLL中构建一个interface服务器,并成功地获得一个接口指针并调用该方法。这是作为第一步做的,因为我只是在学习。稍后我将不需要DLL;它只是作为概念的证明,即我的组件和接口基本上是正常的。

然后我在EXE中构建了一个进程外服务器。我已经到了可以从客户端调用CoCreateInstance()的地步了,EXE已经启动,注册了它的工厂,并且工厂创建了组件的一个实例。CoCreateInstance返回S_OK,客户端接收一个非空的接口指针。

当我调用接口的方法时,问题就会发生。

  • 首先,方法中的断点没有被击中(是的,它在另一个进程中,但我也在调试服务器。服务器中的其他断点被击中ok)。
  • 其次,客户端报告Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.

我绝对知道COM接口中的方法必须使用__stdcall,并且我已经检查过几次,它没有丢失。此外,组件(C++)的实现来源于MIDL生成的接口。因此,接口的头文件具有正确的调用约定,如果组件的头文件没有,编译器会抱怨覆盖不同。

由于断点甚至没有命中,我的直觉是,从根本上讲,本地过程调用有一些问题,比如vtbl没有正确设置。有没有人有什么建议会导致观察到的行为?有关于如何调试代理/存根代码的技巧吗?

编辑:

作为对WhozCraig的响应,这里的IDL文件:

代码语言:javascript
运行
AI代码解释
复制
import "unknwn.idl";

// Interface IMyApp1
[
   object,
   uuid(440EA043-DF6D-4df9-963D-7660BBA829EF),
   helpstring("IMyApp1 Interface"),
   pointer_default(unique)
]

interface IMyApp1: IUnknown
{
   HRESULT ShowAboutBox(void);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-30 14:18:55

我发现了问题。这是一个相当尴尬的错误,但有趣的是,它会导致观察到的效果,所以我会张贴在这里,以防其他人有同样的问题。

客户在做什么

代码语言:javascript
运行
AI代码解释
复制
HdResult = CoCreateInstance(
   sClassIdApp,
   NULL,
   CLSCTX_LOCAL_SERVER,
   IID_IUnknown,   // Oops...
   (void**) &pInterface);

pInterface->ShowAboutBox();

而不是

代码语言:javascript
运行
AI代码解释
复制
HdResult = CoCreateInstance(
   sClassIdApp,
   NULL,
   CLSCTX_LOCAL_SERVER,
   IID_IMyApp1,
   (void**) &pInterface);

pInterface->ShowAboutBox();

呃..。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13128199

复制
相关文章
在Cookie中存储对象
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/details/46955119
DannyHoo
2018/09/13
3.8K0
ArrayList在Java多线程中的应用
开发中,存在这样的业务逻辑,类似倒金字塔结构,下层数据需要基于上层的数据进行逻辑计算。设计思路是:定义一个全局变量upLayerList,来保存上一层的数据。每一层计算仅需要知道upLayerList就可以,不用关心上一层数据怎么获取。当前层计算完毕后,把结果赋值给upLayerList,留给下一层使用。
用户2146693
2019/08/08
1.5K0
ArrayList在Java多线程中的应用
Java中的ArrayList
在Java编程中,ArrayList是一种常用的动态数组,可以在运行时自动调整大小。本文将深入探讨ArrayList的底层实现,并通过性能分析来评估其优劣。
疯狂的KK
2023/08/08
2110
Java中的ArrayList
Java中ArrayList的用法
ArrayList类是一个特殊的数组--动态数组。来自于System.Collections命名空间;通过添加和删除元素,就可以动态改变数组的长度。
SingYi
2022/07/14
1.2K0
在Java中如何加快大型集合的处理速度
作者 | Nahla Davies 译者 | 明知山 策划 | 丁晓昀 本文讨论了 Java Collections Framework 背后的目的、Java 集合的工作原理,以及开发人员和程序员如何最大限度地利用 Java 集合。 1 什么是 Java 集合 尽管 Java 已经过了 25 岁生日,仍然是当今最受欢迎的编程语言之一。超过 100 万个网站通过某种形式在使用 Java,超过三分之一的软件开发人员的工具箱中有 Java。 Java 在它的整个生命历程中经历了重大的演变。一个早期的
深度学习与Python
2023/03/29
1.9K0
在Java中如何加快大型集合的处理速度
如何在ArrayList中存储不同类型的对象并按照类型输出数据
高久峰
2023/06/27
3750
Java中ArrayList的同步方法
arrayList 的实现是默认不同步的。这意味着如果一个线程在结构上修改它并且多个线程同时访问它,它必须在外部同步。结构修改意味着从列表中添加或删除元素或显式调整后备数组的大小。改变现有元素的值不是结构修改。
小锋学长生活大爆炸
2021/09/26
1.9K0
java中arraylist扩容问题_Arraylist扩容机制[通俗易懂]
当我们要 add 进第1个元素到 ArrayList 时,elementData.length 为0 (因为还是一个空的 list),因为执行了 ensureCapacityInternal() 方法 ,所以 minCapacity 此时为10。此时,minCapacity – elementData.length > 0成立,所以会进入 grow(minCapacity) 方法。
全栈程序员站长
2022/09/06
9790
Iterator在ArrayList中的源码实现
获取迭代器 List<LinkedHashMap> list = new ArrayList<>(); Iterator iterator = list.iterator(); iterator()方法实现 public Iterator<E> iterator() { return new Itr(); } Itr 源码 /** * An optimized version of AbstractList.Itr */ private class Itr imp
小小明童鞋
2018/06/13
1.1K0
SharedPreferences存储ArrayList
最近在做“桌面”项目(奶糖桌面),在做到“隐藏APP”的时候,是把要隐藏的APP(arraylist)包名拿出来,在获取全部APP(allapplist)的时候,把获取到的包名和所有APP包名做一个比较,如果存在的话就从allapplist中移除这一项。详情可参考以下代码:
奶油话梅糖
2021/03/16
9470
Java中ArrayList与LinkedList的区别
Java中ArrayList与LinkedList的区别 一般大家都知道ArrayList和LinkedList的区别:       1. ArrayList的实现是基于数组,LinkedList的实现是基于双向链表。        2. 对于随机访问,ArrayList优于LinkedList       3. 对于插入和删除操作,LinkedList优于ArrayList   4. LinkedList比ArrayList更占内存,因为LinkedList的节点除了存储数据,还存储了两个引用,一个指向前
nnngu
2018/03/15
1.6K0
Java中Arraylist与linkedlist的区别
List: 有顺序的,元素可以重复 遍历:for 迭代 排序:Comparable Comparator Collections.sort() ArrayList:底层用数组实现的List 特点:查询效率高,增删效率低 轻量级 线程不安全 遍历: ArrayList<String> al=new ArrayList(); al.add("winsun"); al.add("weixin"); al.add("mybole"); for(int i=0;i<al.size();i
闵开慧
2018/03/30
9720
Java 中的 Vector、Stack 与 ArrayList
引子:首先不得不说, Vector 与 Stack 这一对继承设计是蹩脚、失败的。
Fisherman渔夫
2020/02/17
1.1K0
Java中ArrayList集合的基本使用
概述: 要知道数组的长度是不可改变的 但是ArrayList集合的长度是可以随意变化的 1.创建 类型不能是基本数据类型 只能是引用数据类型 用基本数据类型的包装类就可以 //创建ArrayList集合 ArrayList<String> arrayList = new ArrayList<String>(); //int包装类 ArrayList<Integer> arrayList2 = new ArrayList<Integer>(); 对照表:
用户9006224
2022/12/21
6740
Java中ArrayList集合的基本使用
JAVA对象在JVM中内存分配
如果你还不了解JVM内存模型的建议您先看下JVM内存模型 以一下代码为例,来分析下,java的实例对象在内存中的空间分配(JDK1.8)。 public class Student { private String name; private static Birthday birthday = new Birthday(); public Student(String name) { this.name = name; } public sta
java404
2018/05/18
1.9K0
面试官:Java中实例对象存储在哪?
低级语言是计算机认识的语言、高级语言是程序员认识的语言。如何从高级语言转换成低级语言呢?这个过程其实就是编译。
Java宝典
2021/03/16
5970
Java 移动 ArrayList 中的元素的方法
原文地址:https://www.baeldung.com/java-arraylist-move-items
明明如月学长
2023/03/13
1.5K0
ArrayList实现原理分析(Java源码剖析)ArrayList使用的存储的数据结构ArrayList的初始化ArrayList是如何动态增长ArrayList如何实现元素的移除ArrayList
ArrayList是我们经常使用的一个数据结构,我们通常把其用作一个可变长度的动态数组使用,大部分时候,可以替代数组的作用,我们不用事先设定ArrayList的长度,只需要往里不断添加元素即可,ArrayList会动态增加容量。ArrayList是作为List接口的一个实现。 那么ArrayList背后使用的数据结构是什么呢? ArrayList是如何保证动态增加容量,使得能够正确添加元素的呢?
desperate633
2018/08/27
1.6K0
java之学习去除ArrayList中重复自定义对象元素
结果示意图: 前言: 很多时候或者很多项目中都会遇到集合中重复的部分,如何去除这些重复的部分呢?接下来小编就用创建新集合的方式去除集合中重复的部分。 原理: 原理就是创建新的集合 把旧的集合复制到新的
吾爱乐享
2018/07/12
1.7K0
在Java中将ArrayList转换为Array
In this tutorial you will learn how to convert ArrayList to Array in Java.
用户7886150
2021/04/29
1.8K0

相似问题

在ArrayList中存储对象时出错

20

如何检索存储在Java ArrayList中的对象值

60

在arraylist中存储对象

52

Java:如何存储和传输大型Integer-ArrayList

120

在java中存储要文件的大型JSON对象?

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文