标签: interop

使用Microsoft.Office.Interop.Word计算字数

如何使用Microsoft.Office.Interop.Word?获取Word文档中特定单词的出现次数?

例如,在我的Word文档中,我##<Test Sub Clause1>##在不同的地方有两个标签.我需要在特定文档中记录它的总数.在我的例子中,它将是2.

是否存在任何预定义的函数Microsoft.Office.Interop.Word来获取此计数?或者最简单的方法是什么?

c# interop ms-word

0
推荐指数
1
解决办法
3653
查看次数

在C#中禁用垃圾收集进行调试?

是否可以在C#中完全关闭垃圾收集?我正在调试一些毛茸茸的托管/本机互操作内存错误,我想快速排除GC释放我仍然需要的本机对象的可能性.

c# debugging interop garbage-collection

0
推荐指数
1
解决办法
844
查看次数

P/Invoke Interop Assistant - 是否像导入 dll 头文件一样简单?

我正在尝试为一组非托管 C++ 库创建包装器。我有库的代码,因此我下载了 P/invoke 互操作助手。

我对 C++ 项目中的导出内容有点困惑。它只是项目的标题吗?

这是一个相当大的工程。我是否只需将每个库的标头加载到命令行工具中并生成 C# 签名?

完成此操作后,我是否需要手动将实际的 dll 导入添加到它们中,如下所示,或者是否有一种方法将其定义为一个 DLL?:

[DllImport(MyDLL.dll)]
Run Code Online (Sandbox Code Playgroud)

.net c# c++ pinvoke interop

0
推荐指数
1
解决办法
3934
查看次数

将超链接添加到当前 PowerPoint 中的幻灯片

我一直在寻找这个数小时,但找不到合适的方法来这样做。在 MSDN 上,他们建议使用AddressSubAddress定位演示文稿中的幻灯片,但这没有达到其目的。

所以我的问题是,如何在同一个演示文稿中向幻灯片添加超链接?

c# powerpoint interop

0
推荐指数
1
解决办法
1605
查看次数

从 C# 调用 GetProcessDpiAwareness 总是返回错误 E_INVALIDARG

我想检索 Windows 10 Pro 64 位中指定进程 ID 的有效 DPI 感知值。我需要的值是我可以使用 WinAPI GetProcessDpiAwareness函数获得的PROCESS_DPI_AWARENESS之一。

为了实现我所需要的,我在 VS 2015 中编写了一个简单的单窗口 C# WPF 应用程序。我将我感兴趣的进程 ID 输入到 TextBox txtProcessID 中,当我按下 txtProcessID 按钮时,结果显示在 TextBlock txtResult 中:

private const int S_OK = 0;
private enum PROCESS_DPI_AWARENESS
{
    PROCESS_DPI_UNAWARE = 0,
    PROCESS_SYSTEM_DPI_AWARE = 1,
    PROCESS_PER_MONITOR_DPI_AWARE = 2
}
[DllImport("Shcore.dll")]
private static extern int GetProcessDpiAwareness(IntPtr hprocess, out PROCESS_DPI_AWARENESS value);

private void btnGetDPIAwareness_Click(object sender, RoutedEventArgs e)
{
    int procIDint = int.Parse(txtProcessID.Text);
    IntPtr procID = new IntPtr(procIDint);
    PROCESS_DPI_AWARENESS value; …
Run Code Online (Sandbox Code Playgroud)

c# winapi interop process dpi-aware

0
推荐指数
1
解决办法
1256
查看次数

返回与指针分配之间的 c_char_p 行为不一致

考虑以下 C 函数:

void AssignPointer(char **p) {
    *p = "Test1";
}

char* Return() {
    return "Test2";
}
Run Code Online (Sandbox Code Playgroud)

现在考虑以下 Python 代码:

import ctypes

lib = CDLL('LibraryPathHere')

lib.AssignPointer.restype = None
lib.AssignPointer.argtypes = (ctypes.POINTER(ctypes.c_char_p),)

lib.Return.restype = ctypes.c_char_p
lib.Return.argtypes = None

def to_python_string(c_str : ctypes.c_char_p) -> str:
    return c_str.value.decode('ascii')
Run Code Online (Sandbox Code Playgroud)

现在进行以下工作:

c_str = ctypes.c_char_p()
lib.AssignPointer(ctypes.byref(c_str))
print(to_python_string(c_str))
Run Code Online (Sandbox Code Playgroud)

然而,以下给出AttributeError: 'bytes' object has no attribute 'value'

c_str = lib.Return()
print(to_python_string(c_str))
Run Code Online (Sandbox Code Playgroud)

在第一种情况下,调试器显示c_strc_char_p(ADDRESS_HERE)。在第二种情况下,调试器显示c_strb'Test2'

这是 Python/ctypes 中的错误还是我做错了什么?

c python string interop ctypes

0
推荐指数
1
解决办法
1504
查看次数

在 C++ 代码中删除在 C# 中分配的内存

我有 C#(核心)和 C++(非托管 DLL)之间的代码互操作。

在 C# using 中分配的内存Marshal.AllocHGlobal()需要在 C# using中释放Marshal.FreeHGlobal()

在 C++ using 中分配的内存new需要在 C++ using中释放delete

由于 GC 不再跟踪这些内存处理程序,我可以随时deleteFreeHGlobal()随心所欲吗?

c# c++ interop memory-management

0
推荐指数
1
解决办法
414
查看次数

在.NET 4.0中不推荐使用托管代码和本机代码之间的互操作通信?

我收到了一位供应商的消息,说明他们将删除对Interop库的支持,因为:

从.NET 4.0开始,不推荐使用托管代码和本机代码之间基于互操作的通信

它是否正确?如果是这样,那么正确的方法是什么?为什么?我无法理解为什么从Interop管理COM对象是个坏主意.就我记忆中的所有Office产品而言,微软都这样做.

.net c# interop

-1
推荐指数
1
解决办法
542
查看次数

为什么在使用 .NET 6.0 时会收到 EntryPointNotFoundException 错误,而在使用 4.7.1 时则不会?

我正在使用 C++ 创建 DLL 并使用 C# 导入它。我编译该 DLL 没有问题,并且从 .NET 4.7.1 调用它时工作正常。但是,当我尝试从 .NET 6.0 调用它时,出现错误EntryPointNotFoundException

Unhandled exception. System.EntryPointNotFoundException: 
Unable to find an entry point named 'E' in DLL 'test.dll'.
   at Program.E(int a, int b)
   at Program.Main(String[] args) in G:\C++\Test\Program.cs:line 6
Run Code Online (Sandbox Code Playgroud)

测试.csproj

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <!--<TargetFramework>net4.7.1</TargetFramework>-->
    <TargetFramework>net6.0</TargetFramework>
    <OutputType>Exe</OutputType>
    <Configuration>Debug</Configuration>
  </PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)

测试.cpp

extern "C"__declspec(dllexport) int E(int a, int b)
{
   return x + y;
}
Run Code Online (Sandbox Code Playgroud)

程序.cs

public class Program
{
    [DllImport("test.dll")] public static extern int E(int a, int b); …
Run Code Online (Sandbox Code Playgroud)

.net c# c++ interop .net-6.0

-1
推荐指数
1
解决办法
1682
查看次数

将Delphi Dll导入我的Vb.net项目

我试图将delphi dll导入我的vb.net项目

这是我的代码:

Private Declare Function AddIntegers Lib "C:\Program Files (x86)\Borland\Delphi6\Projects\first dll\Project2.dll" Alias "AddIntegers" (ByVal a As Integer, ByVal b As Integer) As Integer

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim ii As Integer = AddIntegers(1, 3)
        MsgBox(ii)
    End Sub
Run Code Online (Sandbox Code Playgroud)

这是delphi库代码:

library MyFirstLibrary;

uses
  SysUtils,
  Classes;

{$R *.res}

function AddIntegers(_a, _b: integer): integer; stdcall;
begin
  Result := _a + _b;
end;

exports
   AddIntegers;
begin
end.
Run Code Online (Sandbox Code Playgroud)

有一个EntryPointNotFoundException:

Unable to find an entry point named 'AddIntegers' …
Run Code Online (Sandbox Code Playgroud)

vb.net delphi interop

-3
推荐指数
1
解决办法
1446
查看次数