小编Loc*_*min的帖子

VBA Windows 10 问题中的文本到剪贴板

我有一个函数,用于将字符串发送到 Windows 剪贴板:

Sub TextToClipboard(ByVal Text As String)

  With CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") 'FM20.dll (Microsoft Forms 2.0 Object Library)
    .SetText Text
    .PutInClipboard
  End With

End Sub
Run Code Online (Sandbox Code Playgroud)

我最近将我的机器升级到了 Windows 10,现在当我运行这个功能时,它会吃掉我剪贴板中的所有内容,并用一些垃圾字符替换它。根据我将它们粘贴到的应用程序,我会得到关于这些字符是什么的不同结果:

  1. VBA 编辑器:??
  2. 微软字:?? (被盒子包围)
  3. Notepad++:xEF xBF xBF xEF xBF xBF(黑框包围的白色文本)

从 MSDN获取代码以使用 Windows API(我创建了我的函数 PtrSafe,如下所示),并且“GlobalUnlock”函数返回“1”,因此我猜它无法正确分配内存。

Option Explicit

#If VBA7 Then

Declare PtrSafe Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) _
   As Long
Declare PtrSafe Function GlobalLock Lib "kernel32" (ByVal hMem As Long) _
   As Long
Declare PtrSafe Function GlobalAlloc …
Run Code Online (Sandbox Code Playgroud)

vba

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

在 F# 中内联 C# 对象创建

我正在尝试在某些 F# 代码中与 C# 库互操作。将以下 C# 视为我正在使用的库(或跳过下面以查看我首先使用的实际库):

public class Options
{
    public Options(string name)
    {
        Name = name;
    }

    public string Name { get; }
    public string SomeProperty { get; set; }
}

public class ServiceBuilder
{
    public ServiceBuilder ApplyOptions(Options options)
    {
        //Apply Options in some way
        return this;
    }

    public TheService Build()
    {
        return new TheService();
    }
}

public class TheService
{
}
Run Code Online (Sandbox Code Playgroud)

然后我尝试创建服务但保持流畅我有以下 F# 代码:

//Valid Approach but not inlined :(
let options = Options("Test")
options.SomeProperty <- "SomeValue" …
Run Code Online (Sandbox Code Playgroud)

f# initialization object

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

创建“添加”计算表达式

我希望下面的示例计算表达式和值返回 6。对于某些数字并没有像我期望的那样产生。我缺少获得结果的步骤是什么?谢谢!

type AddBuilder() =
    let mutable x = 0
    member _.Yield i = x <- x + i
    member _.Zero() = 0
    member _.Return() = x

let add = AddBuilder()

(* Compiler tells me that each of the numbers in add don't do anything
   and suggests putting '|> ignore' in front of each *)
let result = add { 1; 2; 3 }

(* Currently the result is 0 *)
printfn "%i should be 6" result
Run Code Online (Sandbox Code Playgroud)

注意:这只是为了创建我自己的计算表达式来扩展我的学习。Seq.sum将是一个更好的方法。我对这个例子完全忽略了计算表达式的价值并且不利于学习的想法持开放态度。

f# computation-expression

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

标签 统计

f# ×2

computation-expression ×1

initialization ×1

object ×1

vba ×1