小编mar*_*est的帖子

如何将范围传递给Word VBA中的Sub?

我知道这听起来很简单,但看起来并非如此.

如果我在Word VBA中写这个,它总是说"不兼容的类型" - 为什么?我该如何使它工作?

Sub GetRange()
   Dim r As Range
   Set r = ActiveDocument.Paragraphs(5).Range

   ProcessRange (r)
End Sub

Sub ProcessRange(r As Range)
    Debug.Print "This generates an error (incompatible types)- why?"
End Sub
Run Code Online (Sandbox Code Playgroud)

vba ms-word range

8
推荐指数
2
解决办法
4719
查看次数

从C#到F#:从F#调用的外部函数中的固定数组和Stringbuilder

我正在尝试从F#访问外部DLL函数.这个让我真的很汗.

C头是:

ext_def(int32) swe_calc_ut(double tjd_ut, int32 ipl, int32 iflag, 
double *xx, char *serr);
Run Code Online (Sandbox Code Playgroud)

我相应地在F#中导入了它:

extern int32 ext_swe_calc_ut(double tjd_ut, int32 ipl, int32 iflag, double *xx, StringBuilder serr);
Run Code Online (Sandbox Code Playgroud)

问题是阵列部分.我尝试了来自F#Powerpack的PinnedArray,但是呼叫仍然失败.char数组可能没问题,即使我无法检查,因为调用失败了.

到目前为止它是:

open System
open System.Runtime.InteropServices
open System.Text
open Microsoft.FSharp.NativeInterop

#r "FSharp.PowerPack.dll" 
#nowarn "51"

module Sweph =

    [<DllImport(@"swedll32.dll", CharSet = CharSet.Ansi, EntryPoint = "swe_calc_ut")>]
    extern int32 ext_swe_calc_ut(double tjd_ut, int32 ipl, int32 iflag, double *xx, StringBuilder serr);
    /// <param name="jdnr">Julian day</param>
    /// <returns>Array with 6 doubles: 0:longitude, 1:latitude, 2:distance,3:speel in longitude, 
    ///          4: speed in …
Run Code Online (Sandbox Code Playgroud)

arrays pinvoke f# external pass-by-reference

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

如何通过引用参数调用F#中的外部函数?

我正在尝试将C#dll-Call移植到F#.

C#调用是:

[DllImport("swedll32.dll", CharSet = CharSet.Ansi, EntryPoint = "swe_revjul")]
private extern static double ext_swe_revjul(double tjd, int gregflag, ref int year, ref int month, ref int day, ref double hour);
Run Code Online (Sandbox Code Playgroud)

我试图用F#以六种方式写这个(至少!),但都无济于事.其中:

[<DllImport("swedll32.dll", CharSet = CharSet.Ansi, EntryPoint = "swe_revjul")>]
extern double ext_swe_revjul (double tjd ) (gregflag:int) (year: int byref) (month: int byref) (day: int byref) (hour: double byref);
Run Code Online (Sandbox Code Playgroud)

要么:

let ext_swe_revjul double (tjd:double) (gregflag:int) (year: int byref) (month: int byref) (day: int byref) (hour: double byref )
Run Code Online (Sandbox Code Playgroud)

我尝试使用限定符或"a:byref"编写byref - 有人可以帮助我吗?非常感谢你提前!

暂时沮丧的科学家谁只想得到他的公式:-)

pinvoke f# external pass-by-reference

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

标签 统计

external ×2

f# ×2

pass-by-reference ×2

pinvoke ×2

arrays ×1

ms-word ×1

range ×1

vba ×1