Skip to content

Commit

Permalink
Add test
Browse files Browse the repository at this point in the history
  • Loading branch information
elinor-fung committed Jan 30, 2025
1 parent d86cd4d commit e612989
Show file tree
Hide file tree
Showing 6 changed files with 63 additions and 0 deletions.
1 change: 1 addition & 0 deletions src/tests/Interop/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ add_subdirectory(MarshalAPI/FunctionPointer)
add_subdirectory(NativeLibrary/NativeLibraryToLoad)
add_subdirectory(DllImportAttribute/DllImportPath)
add_subdirectory(DllImportAttribute/ExactSpelling)
add_subdirectory(DllImportSearchPaths/NativeLibraryWithDependency)
add_subdirectory(ICustomMarshaler/ConflictingNames)
add_subdirectory(ICustomMarshaler/Primitives)
add_subdirectory(LayoutClass)
Expand Down
29 changes: 29 additions & 0 deletions src/tests/Interop/DllImportSearchPaths/DllImportSearchPathsTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,20 @@ public static void AssemblyDirectory_Fallback_Found()
Environment.CurrentDirectory = currentDirectory;
}
}

[ConditionalFact(nameof(CanLoadAssemblyInSubdirectory))]
[PlatformSpecific(TestPlatforms.Windows)]
public static void AssemblyDirectory_SearchFlags_WithDependency_Found()
{
// Library and its dependency should be found in the assembly directory.
var assembly = Assembly.LoadFile(Path.Combine(Subdirectory, $"{nameof(DllImportSearchPathsTest)}.dll"));
var type = assembly.GetType(nameof(NativeLibraryWithDependency));
var method = type.GetMethod(nameof(NativeLibraryWithDependency.Sum));

int sum = (int)method.Invoke(null, new object[] { 1, 2 });
Assert.Equal(3, sum);
Console.WriteLine("NativeLibraryWithDependency.Sum returned {0}", sum);
}
}

public class NativeLibraryPInvoke
Expand Down Expand Up @@ -93,3 +107,18 @@ public static int Sum(int a, int b)
[DefaultDllImportSearchPaths(DllImportSearchPath.AssemblyDirectory | DllImportSearchPath.System32)]
static extern int NativeSum(int arg1, int arg2);
}

public class NativeLibraryWithDependency
{
public static int Sum(int a, int b)
{
return CallDependencySum(a, b);
}

// For LoadLibrary on Windows, search flags, like that represented by System32, are incompatible with
// looking at a specific path (per AssemblyDirectory), so we specify both flags to validate that we do
// not incorrectly use both when looking in the assembly directory.
[DllImport(nameof(NativeLibraryWithDependency))]
[DefaultDllImportSearchPaths(DllImportSearchPath.AssemblyDirectory | DllImportSearchPath.System32)]
static extern int CallDependencySum(int a, int b);
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
<Compile Include="*.cs" />
<Compile Include="../NativeLibrary/NativeLibraryToLoad/NativeLibraryToLoad.cs" />
<CMakeProjectReference Include="../NativeLibrary/NativeLibraryToLoad/CMakeLists.txt" />
<CMakeProjectReference Include="NativeLibraryWithDependency/CMakeLists.txt" />
</ItemGroup>

<PropertyGroup>
Expand All @@ -18,7 +19,9 @@
<Target Name="SetUpSubdirectoryNative" AfterTargets="CopyNativeProjectBinaries">
<ItemGroup>
<NativeLibrariesToMove Include="$(OutDir)/libNativeLibrary.*" />
<NativeLibrariesToMove Include="$(OutDir)/libNativeLibraryWithDependency.*" />
<NativeLibrariesToMove Include="$(OutDir)/NativeLibrary.*" />
<NativeLibrariesToMove Include="$(OutDir)/NativeLibraryWithDependency.*" />
</ItemGroup>
<Move SourceFiles="@(NativeLibrariesToMove)" DestinationFiles="@(NativeLibrariesToMove -> '$(LibrarySubdirectory)/%(Filename)%(Extension)')"/>
</Target>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
project(NativeLibraryWithDependency)
include("${CLR_INTEROP_TEST_ROOT}/Interop.cmake")

add_library(Dependency SHARED Dependency.cpp)
target_link_libraries(Dependency PRIVATE ${LINK_LIBRARIES_ADDITIONAL})

add_library(NativeLibraryWithDependency SHARED NativeLibraryWithDependency.cpp)
target_link_libraries(NativeLibraryWithDependency PRIVATE Dependency ${LINK_LIBRARIES_ADDITIONAL})
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

#include <platformdefines.h>

extern "C" DLL_EXPORT int STDMETHODCALLTYPE Sum(int a, int b)
{
return a + b;
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

#include <platformdefines.h>

extern "C" int STDMETHODCALLTYPE Sum(int a, int b);

extern "C" DLL_EXPORT int STDMETHODCALLTYPE CallDependencySum(int a, int b)
{
return Sum(a, b);
}

0 comments on commit e612989

Please sign in to comment.