标签: com

Ruby可以导入.NET DLL吗?

我有兴趣在我必须使用.NET dll的项目中使用/学习RoR.Ruby能否导入.NET dll?

.net ruby windows com dll

14
推荐指数
1
解决办法
1万
查看次数

CoTaskMemAlloc的用法?

什么时候适合使用CoTaskMemAlloc?有人能举个例子吗?

windows com winapi

14
推荐指数
3
解决办法
1万
查看次数

什么是PVOID数据类型?

有人可以解释PVOID在以下函数中使用的是什么以及如何使用它:

BOOL DoSomething(PVOID pMemPhy)
Run Code Online (Sandbox Code Playgroud)

c++ com pointers

14
推荐指数
2
解决办法
4万
查看次数

如何检测dll的类型?(COM,.NET,WIN32)

我需要处理一个文件夹中的一些dll和exe文件,并确定我正在处理的文件类型:.NET,COM,Win32或其他一些外来生命形式.

我一直在尝试确定检测DLL类型的最简单方法,你怎么看待这个:

  1. COM dll =>我做了一个LoadLibrary,然后是" DllRegisterServer "的GetProcAddress .如果我得到有效的回报,那就是一个COM文件.

  2. .NET dll =>如果dll依赖于MSCOREE.DLL,它总是一个.NET dll?

  3. Win32 dll =>如果上述测试都失败了,那就是Win32 dll?

当然必须有更好的方法来检测我们正在处理的dll类型.以上是非常笨重的,并不适用于EXE文件?必须有一些我没想到的其他方式.

理想情况下,我希望能够让解析器确定编译文件的编译器,以及它使用的功能,如MFC,Atl,Stl等......但我怀疑在预反射时代是否可行?

.net com dll file

14
推荐指数
2
解决办法
1万
查看次数

在具有多个接口的对象中实现QueryInterface()时,为什么需要显式向上转换()

假设我有一个实现两个或更多COM接口的类:

class CMyClass : public IInterface1, public IInterface2 {
};
Run Code Online (Sandbox Code Playgroud)

几乎我看到的每个文档都表明,当我为IUnknown实现QueryInterface()时,我明确地将此指针向上转换为其中一个接口:

if( iid == __uuidof( IUnknown ) ) {
     *ppv = static_cast<IInterface1>( this );
     //call Addref(), return S_OK
}
Run Code Online (Sandbox Code Playgroud)

问题是为什么我不能复制这个

if( iid == __uuidof( IUnknown ) ) {
     *ppv = this;
     //call Addref(), return S_OK
}
Run Code Online (Sandbox Code Playgroud)

文档通常说如果我执行后者,我将违反对同一对象上的QueryInterface()的任何调用必须返回完全相同的值的要求.

我不太明白.难道他们的意思是,如果我QI()用于IInterface2和调用QueryInterface()通过该指针C++将通过略有不同,如果我QI()用于IInterface2因为C++每次都会使点到子对象?

c++ com multiple-inheritance visual-c++

14
推荐指数
2
解决办法
6065
查看次数

COM DLL和ActiveX控件之间的区别

我知道几个相似之处..

  • 两者都不能自己执行.它需要一些程序来实例化它.

  • COM DLL和ActiveX控件是平台独立的.(是这样吗...?)

  • 双方需要支持该接口IUnknown,并公开三个方法QueryInterface,AddRefRelease.

  • 它还需要在使用之后注册,并在完成之后注册.

但他们有什么不同?有人可以列出来吗?

另外我的理解是ActiveX控件是OLE自定义控件(OCX).我听说过像ActiveX DLL这样的术语.它是ActiveX控件的另一种形式还是不同的东西?

com dll activex

14
推荐指数
1
解决办法
8897
查看次数

使用Office Interop将单元格写入Excel的最快方法?

我正在编写一个函数,使用VB .NET中的Office Interop将数据导出到Excel.我目前正在使用Excel工作表的Cells()方法直接编写单元格:

worksheet.Cells(rowIndex, colIndex) = data(rowIndex)(colIndex)
Run Code Online (Sandbox Code Playgroud)

这需要很长时间才能获得大量数据.是否有更快的方法可以立即将大量数据写入Excel?用范围做事会更快吗?

vb.net com excel performance office-interop

14
推荐指数
3
解决办法
3万
查看次数

我是否需要在每个'foreach'迭代中释放COM对象?

这是(潜在的)问题:

我创建一个COM对象,然后使用'foreach'迭代它返回的集合中的每个元素.我是否需要释放我在集合中迭代的每个元素?(参见下面的代码.)如果是这样的话,我无法想出一种有效地从'finally'语句中释放它的方法,以防万一在项目被操作时出现错误.

有什么建议?

private static void doStuff()
{
    ComObjectClass manager = null;

    try
    {
        manager = new ComObjectClass();
        foreach (ComObject item in manager.GetCollectionOfItems())
        {
            Log.Debug(item.Name);
            releaseComObject(item); // <-- Do I need this line?
                                    //     It isn't in a 'finally' block...
                                    //             ...Possible memory leak?
        }
    }
    catch (Exception) { }
    finally
    {
        releaseComObject(manager);
    }
}

private static void releaseComObject(object instance)
{
    if (instance != null)
    {
        try
        {
            System.Runtime.InteropServices.Marshal.ReleaseComObject(instance);
        }
        catch
        {
            /* log potential memory leak */
            Log.Debug("Potential memory …
Run Code Online (Sandbox Code Playgroud)

c# com memory-leaks memory-management com-interop

14
推荐指数
1
解决办法
2868
查看次数

从vba调用.net库方法

我在ASP.net,c#中开发了一个Web服务,并在IIS上托管,由vba客户端使用.下载了Office 2003 Web Services 2.01工具包后,我遇到了成功创建所需代理类的问题(许多用户在线记录),并决定创建一个.net DLL库.我创建了一个库,它引用了Web服务并将其中一个方法暴露给c#中的公共函数.

我现在有三个问题:

  1. 如何在VBA中引用dll类?我试图去工具 - >引用并浏览到dll位置,但是我收到错误"无法添加对指定文件的引用".磁盘上是否有特定位置我必须复制.dll?

  2. 我还可以复制dll文件旁边的dll.config文件,以便在那里使用端点URL吗?

  3. 由于要调用的方法是接受一个对象(由各种成员和几个List <>成员组成,这些如何在VBA代码中实现?

.net com vba com-callable-wrapper

14
推荐指数
1
解决办法
1万
查看次数

如何将消息发布到运行消息泵的STA线程?

因此,在此之后,我决定在专用的STA线程上显式实例化COM对象.实验表明COM对象需要一个消息泵,我通过调用它来创建Application.Run():

private MyComObj _myComObj;

// Called from Main():
Thread myStaThread = new Thread(() =>
{
    _myComObj = new MyComObj();
    _myComObj.SomethingHappenedEvent += OnSomthingHappened;
    Application.Run();
});
myStaThread.SetApartmentState(ApartmentState.STA);
myStaThread.Start();
Run Code Online (Sandbox Code Playgroud)

如何从其他线程发布STA线程的消息泵消息?

注意: 为了简洁起见,我对问题进行了大量编辑.@Servy的答案的某些部分现在似乎无关紧要,但它们是针对原始问题的.

c# com interop message-queue sta

14
推荐指数
1
解决办法
8494
查看次数