标签: interop

C#COM DLL:我使用Regasm还是Regsvr32?

我正在构建一个C#ActiveX DLL ...我使用REGASM或REGSVR32进行注册吗?

如何注册64位接口和32位接口?

com 64-bit x86 interop activex

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

在C#中使用SetWindowPos来移动窗口

我有以下代码:

namespace WindowMover
{
    using System.Windows.Forms;

    static class Logic
    {
        [DllImport("user32.dll", EntryPoint = "SetWindowPos")]
        public static extern IntPtr SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int x, int Y, int cx, int cy, int wFlags);

        public static void Move()
        {
            const short SWP_NOMOVE = 0X2;
            const short SWP_NOSIZE = 1;
            const short SWP_NOZORDER = 0X4;
            const int SWP_SHOWWINDOW = 0x0040;

            Process[] processes = Process.GetProcesses(".");
            foreach (var process in processes)
            {
                var handle = process.MainWindowHandle;
                var form = Control.FromHandle(handle);

                if (form == null) continue; …
Run Code Online (Sandbox Code Playgroud)

c# windows interop

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

如何最好地将VARIANT_BOOL转换为C++ bool?

当使用COM时,布尔值将作为VARIANT_BOOL传递,该变量在wtypes.h中声明为short.还有预定义的truefalse值:

#define VARIANT_TRUE ((VARIANT_BOOL)-1)
#define VARIANT_FALSE ((VARIANT_BOOL)0)
Run Code Online (Sandbox Code Playgroud)

哪个是从VARIANT_BOOL转换为C++ bool类型的最佳方法?明显的变体是:

  1. 与VARIANT_FALSE比较

  2. 简单地投奔布尔

其他方式可以很容易地发明.

这是最好的方法 - 最可读,最符合标准,最不容易出现种植错误,最不容易出现移植到64位平台的问题?

c++ windows com interop boolean

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

将接口IDL文件转换为C#

我有一个IDL文件中定义的接口,我想在C#中使用.有没有办法将IDL转换为C#中可用的东西?

c# interop idl interface

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

你如何从Java调用Scala单例方法?

我正在尝试将一些Scala代码注入到我现有的Java应用程序中.(所以说,我想要更多的乐趣).

我在Scala中创建了一个单例东西

ScalaPower.scala

    package org.fun
    class ScalaPower
    object ScalaPower{
      def showMyPower(time:Int) = {
        (0 to time-1).mkString(", ")
      }
    }
Run Code Online (Sandbox Code Playgroud)

现在,在OldJava.java中

class OldJava {
  public void demo(){
    System.out.println(?)
  }
}
Run Code Online (Sandbox Code Playgroud)

我应该填写什么?以便Java将调用showMyPower方法?我都尝试 org.fun.ScalaPower.showMyPower(10)org.fun.ScalaPower.getInstance().showMyPower(10)但没有工作.

(使用Jad反编译类文件只显示无意义的代码.)

编辑 我删除class ScalaPower声明和scala按预期生成静态方法.(打电话给org.fun.ScalaPower.showMyPower(10)工作).

不知道它是否是scala编译器中的错误

java interop scala scala-java-interop

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

通过Interop/pinvoke传递C#回调函数

我正在编写一个C#应用程序,它使用Interop服务来访问本机C++ DLL中的函数.我已经使用了大约10种不同的功能.

现在我不知道如何处理将回调作为参数传递,以便DLL可以调用我的代码.

这是DLL的函数原型:

typedef void (WINAPI * lpfnFunc)(const char *arg1, const char *arg2)
Run Code Online (Sandbox Code Playgroud)

并且允许我传递上述类型的函数:

int WINAPI SetFunc(lpfnFunc f)
Run Code Online (Sandbox Code Playgroud)

这是委托和函数定义的C#代码:

public delegate void Func(string arg1, string arg2);

public static void MyFunc(string arg1, string arg2)
Run Code Online (Sandbox Code Playgroud)

这是我的SetFunc Interop函数的C#代码:

[DllImport("lib.dll", CharSet = CharSet.Ansi)]
public static extern int SetFunc(Func lpfn);
Run Code Online (Sandbox Code Playgroud)

最后这里是我调用SetFunc函数并将其传递给我的回调的代码:

SetFunc(new Func(MyFunc));
Run Code Online (Sandbox Code Playgroud)

不幸的是,我的功能应该被调用.SetFunc函数的返回值是返回Success的错误代码,所以要么它没有调用我的函数,要么因为我的代码错误而无法正常工作.

c# pinvoke interop function callback

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

将C char数组转换为String

我有一个与C库互操作的Swift程序.这个C库返回一个char[]内部有数组的结构,如下所示:

struct record
{
    char name[8];
};
Run Code Online (Sandbox Code Playgroud)

该定义被正确导入Swift.但是,该字段被解释为8个元素(类型)的元组,我不知道如何使用Swift 转换为a .Int8(Int8, Int8, Int8, Int8, Int8, Int8, Int8, Int8)String

没有String接受Int8元组的初始化器,并且似乎不可能获得指向元组的第一个元素的指针(因为类型可以是异构的,这并不奇怪).

现在,我最好的想法是创建一个微小的C函数,它接受一个指向结构本身的指针,并name作为char*指针而不是数组返回,并继续使用它.

然而,是否有纯粹的Swift方式呢?

arrays interop tuples swift

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

C#Excel Interop - 在调用Worksheet.ExportAsFixedFormat时禁止"发布"对话框

我正在使用Excel Interop打开xlsx文件并将其另存为pdf文档.在调用"ExportAsFixedFileFormat"方法时,将显示标题为"Publishing"的对话框以指示进度.如何禁止或隐藏此对话框?我在其他论坛上看到了一些没有令人满意的解决方案的类似问题,但希望有人从那时起就解决了这个问题.

在此输入图像描述

码:

Application application = new Application();
application.DisplayAlerts = false; // <- No effect
application.Visible = false; // <- No effect
application.ScreenUpdating = false; // <- No effect
application.UserControl = false; // <- No effect
application.Workbooks.Open(path, Type.Missing, true);
application.DisplayDocumentActionTaskPane = false; // <- No effect
application.Worksheets[1].ExportAsFixedFormat(XlFixedFormatType.xlTypePDF, path);
Run Code Online (Sandbox Code Playgroud)

.net c# excel interop export

22
推荐指数
1
解决办法
1487
查看次数

将C#委托的调用约定更改为CDECL

当我使用DotNet1.1时,我遇到了C#的这个问题

问题是这个.我有一个非托管的DLL,它有一个函数,它接受一个函数指针(以及其他参数).当我在C#代码中声明DLLImport时,我传递了一个委托.但是C#中的委托具有stdcall调用约定,而非托管函数需要cdecl函数指针.因此,我天真的做法导致了崩溃.然后我找到了以下内容:http://www.codeproject.com/KB/cs/cdeclcallback.aspx有些人编写了一个优秀的库,可以根据我的理解改变代理的调用约定,MSIL-hacking.事情进展顺利,直到......

我迁移到VS2008和新版本的.NET.在此版本下,上述库不起作用.我不是真正的C#或.NET专家,说实话,我几乎不了解他的库做了什么(虽然它是开源的),所以我甚至不想尝试将它适应新的.NET.但是,我希望更新版本的C#可以为我的问题提供更好的解决方案.

那么,SO专家,请帮我解决臀部疼痛:)

c# c++ pinvoke interop calling-convention

21
推荐指数
1
解决办法
9697
查看次数

Microsoft.Office.Interop.Excel.ApplicationClass没有定义构造函数

我试着按照如何在C#教程中打开Excel文件,即在Com选项卡上添加了一个引用Microsoft Office 14.0 Object Library并尝试编译代码:

using Excel = Microsoft.Office.Interop.Excel;
//...
Excel.Application xlApp;
Excel.Workbook xlWorkBook;
Excel.Worksheet xlWorkSheet;

xlApp = new Excel.ApplicationClass();//error here
//...
Run Code Online (Sandbox Code Playgroud)

并且面临编译错误,说

没有为Microsoft.Office.Interop.Excel.ApplicationClass类型定义构造函数.

我错过了什么?

c# excel interop excel-interop

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