58 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #include "CSBindsManager.h"
 | |
| #include "UnrealSharpBinds.h"
 | |
| 
 | |
| FCSBindsManager* FCSBindsManager::BindsManagerInstance = nullptr;
 | |
| 
 | |
| FCSBindsManager* FCSBindsManager::Get()
 | |
| {
 | |
| 	if (!BindsManagerInstance)
 | |
| 	{
 | |
| 		BindsManagerInstance = new FCSBindsManager();
 | |
| 	}
 | |
| 
 | |
| 	return BindsManagerInstance;
 | |
| }
 | |
| 
 | |
| void FCSBindsManager::RegisterExportedFunction(const FName& ClassName, const FCSExportedFunction& ExportedFunction)
 | |
| {
 | |
| 	FCSBindsManager* Instance = Get();
 | |
| 	TArray<FCSExportedFunction>& ExportedFunctions = Instance->ExportedFunctionsMap.FindOrAdd(ClassName);
 | |
| 	ExportedFunctions.Add(ExportedFunction);
 | |
| }
 | |
| 
 | |
| void* FCSBindsManager::GetBoundFunction(const TCHAR* InOuterName, const TCHAR* InFunctionName, int32 ManagedFunctionSize)
 | |
| {
 | |
| 	TRACE_CPUPROFILER_EVENT_SCOPE(UCSBindsManager::GetBoundFunction);
 | |
| 	
 | |
| 	FCSBindsManager* Instance = Get();
 | |
| 	FName ManagedOuterName = FName(InOuterName);
 | |
| 	FName ManagedFunctionName = FName(InFunctionName);
 | |
| 	
 | |
| 	TArray<FCSExportedFunction>* ExportedFunctions = Instance->ExportedFunctionsMap.Find(ManagedOuterName);
 | |
| 
 | |
| 	if (!ExportedFunctions)
 | |
| 	{
 | |
| 		UE_LOG(LogUnrealSharpBinds, Error, TEXT("Failed to get BoundNativeFunction: No exported functions found for %s"), InOuterName);
 | |
| 		return nullptr;
 | |
| 	}
 | |
| 
 | |
| 	for (FCSExportedFunction& NativeFunction : *ExportedFunctions)
 | |
| 	{
 | |
| 		if (NativeFunction.Name != ManagedFunctionName)
 | |
| 		{
 | |
| 			continue;
 | |
| 		}
 | |
| 			
 | |
| 		if (NativeFunction.Size != ManagedFunctionSize)
 | |
| 		{
 | |
| 			UE_LOG(LogUnrealSharpBinds, Error, TEXT("Failed to get BoundNativeFunction: Function size mismatch for %s::%s."), InOuterName, InFunctionName);
 | |
| 			return nullptr;
 | |
| 		}
 | |
| 			
 | |
| 		return NativeFunction.FunctionPointer;
 | |
| 	}
 | |
| 
 | |
| 	UE_LOG(LogUnrealSharpBinds, Error, TEXT("Failed to get BoundNativeFunction: No function found for %s.%s"), *ManagedOuterName.ToString(), *ManagedFunctionName.ToString());
 | |
| 	return nullptr;
 | |
| }
 |